簡體   English   中英

Tensorflow RNN用於單輸出分類

[英]Tensorflow RNN for classification with single output

我想在Tensorflow中創建一個RNN,對短文本進行分類,並根據每個字母對它們進行分析。 為此,我創建了一個numpy的2D數組,其中每個文本都被填充或截斷,其中每個元素都是一個字符代碼。 輸出只是表示為一熱編碼的numpy 2D數組的clases的向量。

這是一個例子:

train_x.shape, train_y.shape

((91845,50),(91845,5))

輸入由90K行組成,每行50個字符,輸出為90K行,具有5個類。 接下來,我要構建一個網絡,如下圖所示。

網絡

該結構看起來很瑣碎,但我絕對缺乏Tensorflow方面的知識,並且在嘗試至少進行培訓時遇到各種問題。 這是我用來構建網絡的代碼部分

chars = sequence_categorical_column_with_identity('chars', params['domain_size']+1)
chars_emb = tf.feature_column.embedding_column(chars, dimension=10)
columns = [chars_emb]

input_layer, sequence_length = sequence_input_layer(features, columns)

hidden_units = 32
lstm = tf.nn.rnn_cell.LSTMCell(hidden_units, state_is_tuple=True)
rnn_outputs, state = tf.nn.dynamic_rnn(lstm, 
                                      inputs = input_layer,
                                      sequence_length=sequence_length,
                                      dtype=tf.float32)

output = rnn_outputs[:,-1,:]
logits = tf.layers.dense(output, params['n_classes'], activation=tf.nn.tanh)
# apply projection to every timestep.
# Compute predictions.
predicted_classes = tf.nn.softmax(logits)

# Compute loss.

loss = tf.nn.softmax_cross_entropy_with_logits_v2(labels=labels, logits=logits)
# Compute evaluation metrics.
accuracy = tf.metrics.accuracy(labels=labels,
                               predictions=predicted_classes,
                               name='acc_op')

但我得到一個錯誤

InvalidArgumentError (see above for traceback): Input to reshape is a tensor with 8 values, but the requested shape has 1
     [[Node: Reshape = Reshape[T=DT_FLOAT, Tshape=DT_INT32, _device="/job:localhost/replica:0/task:0/device:CPU:0"](softmax_cross_entropy_with_logits, sequence_input_layer/chars_embedding/assert_equal/Const)]]

您可以在此處找到更完整的最小示例。 您很有可能需要Tensorflow 1.8.0。

新增中

loss = tf.reduce_mean(loss)

現在可以訓練網絡,但效果不佳。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM