### TensorFlow concat中的Rank不匹配错误

我一直在尝试构建一个简单的两层神经网络。我研究了TensorFlow的API和官方教程,成功构建了一个单层模型,但在构建神经网络时遇到了问题。以下是我代码中导致错误的一段:

with graph.as_default():    tf_train_dataset = tf.placeholder(tf.float32, shape=(batch_size, image_size * image_size))    tf_train_labels = tf.placeholder(tf.int32, shape=(batch_size, num_labels))    tf_valid_dataset = tf.constant(valid_dataset)    tf_test_dataset = tf.constant(test_dataset)    weights0 = tf.Variable(tf.truncated_normal([image_size**2, num_labels]))    biases0 = tf.Variable(tf.zeros([num_labels]))    hidden1 = tf.nn.relu(tf.matmul(tf_test_dataset, weights0) + biases0)    weights1 = tf.Variable(tf.truncated_normal([num_labels, image_size * image_size]))    biases1 = tf.Variable(tf.zeros([image_size**2]))    hidden2 = tf.nn.relu(tf.matmul(hidden1, weights1) + biases1)    logits = tf.matmul(hidden2, weights0) + biases0    labels = tf.expand_dims(tf_train_labels, 1)    indices = tf.expand_dims(tf.range(0, batch_size), 1)    concated = tf.concat(1, [indices, tf.cast(labels,tf.int32)])    onehot_labels = tf.sparse_to_dense(concated, tf.pack([batch_size, num_labels]), 1.0, 0.0)    loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits, onehot_labels))    optimizer = tf.train.GradientDescentOptimizer(0.5).minimize(loss)    train_prediction = tf.nn.softmax(logits)    valid_prediction = tf.nn.softmax(tf.matmul(tf.nn.relu(tf.matmul(tf.nn.relu(tf.matmul(tf_valid_dataset,weights0) + biases0),weights1)+biases1),weights0)+biases0)    test_prediction = tf.nn.softmax(tf.matmul(tf.nn.relu(tf.matmul(tf.nn.relu(tf.matmul(tf_test_dataset,weights0) + biases0),weights1)+biases1),weights0)+biases0)

错误信息如下:

Traceback (most recent call last):    File "./test1.py", line 60, in <module>    concated = tf.concat(1, [indices, tf.cast(labels,tf.int32)])    File "/Users/username/tensorflow/lib/python2.7/site-packages/tensorflow/python/ops/array_ops.py", line 309, in concat    name=name)    File "/Users/username/tensorflow/lib/python2.7/site-packages/tensorflow/python/ops/gen_array_ops.py", line 70, in _concat    name=name)    File "/Users/username/tensorflow/lib/python2.7/site-packages/tensorflow/python/ops/op_def_library.py", line 664, in apply_op    op_def=op_def)    File "/Users/username/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1836, in create_op    set_shapes_for_outputs(ret)    File "/Users/username/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1476, in set_shapes_for_outputs    shapes = shape_func(op)    File "/Users/username/tensorflow/lib/python2.7/site-packages/tensorflow/python/ops/array_ops.py", line 364, in _ConcatShape    concat_dim + 1:].merge_with(value_shape[concat_dim + 1:])    File "/Users/username/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/tensor_shape.py", line 527, in merge_with    self.assert_same_rank(other)    File "/Users/username/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/tensor_shape.py", line 570, in assert_same_rank    "Shapes %s and %s must have the same rank" % (self, other))    ValueError: Shapes TensorShape([]) and TensorShape([Dimension(10)]) must have the same rank

完整代码请见:http://pastebin.com/sX7RqbAf

我使用的是TensorFlow和Python 2.7。我对神经网络和机器学习还比较新手,感谢您的理解和帮助。


回答:

在您的例子中:

  • tf_train_labels 的形状为 [batch_size, num_labels]
  • 因此 labels 的形状为 [batch_size, 1, num_labels]
  • indices 的形状为 [batch_size, 1]

因此,当您编写以下代码时:

concated = tf.concat(1, [indices, tf.cast(labels,tf.int32)])

会抛出错误,因为 labelsindices 的第三维度不同。labels 的第三维度大小为 num_labels(可能为10),而 indices 没有第三维度。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注