Python 单输出分类的Tensorflow RNN

Python 单输出分类的Tensorflow RNN,python,tensorflow,rnn,Python,Tensorflow,Rnn,我想在Tensorflow中创建一个RNN,对短文本进行分类,并根据每个字母进行分析。为此,我创建了一个numpy 2D数组,其中每条文本要么被填充,要么被截断,其中每个元素都是字符代码。输出就是表示为一个热编码numpy 2D数组的类向量 以下是一个例子: train_x.shape, train_y.shape ((91845,50)、(91845,5)) 输入由90K行组成,每行50个字符,输出为90K行,包含5个类。接下来,我想构建一个如下图所示的网络 这个结构看起来很琐碎,但我显然

我想在Tensorflow中创建一个RNN,对短文本进行分类,并根据每个字母进行分析。为此,我创建了一个numpy 2D数组,其中每条文本要么被填充,要么被截断,其中每个元素都是字符代码。输出就是表示为一个热编码numpy 2D数组的类向量

以下是一个例子:

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)

现在允许对网络进行训练,但结果令人失望。

嗨,你成功修复了吗?请看我自己的答案,除此之外,精确度相当差。我没有找到原因。