TensorFlow concat 中的排名不匹配错误
Rank Mismatch error in TensorFlow concat
我一直在尝试制作一个简单的 2 层神经网络。我研究了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)])
会报错,因为labels
和indices
的第三维不一样。 labels
的第三维大小为 num_labels
(大概是 10),而 indices
没有第三维。
我一直在尝试制作一个简单的 2 层神经网络。我研究了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)])
会报错,因为labels
和indices
的第三维不一样。 labels
的第三维大小为 num_labels
(大概是 10),而 indices
没有第三维。