在Tensorflow中,我网络的最后一层看起来像是:
layer3output = tf.nn.relu(tf.matmul(layer2output, weightsLayer3) + biasesLayer3)
如果我检查输出的大小:
print(tf.shape(layer4output))
我明白了:
Tensor("Shape:0", shape=(2,), dtype=int32)
我预计layer3output
是1D向量,但上面表示2D。额外维度是否与通过feed_dict
提供的示例相对应?
如果是这样,那么当使用feed_dict时,所有Tensorflow变量是否都有一个额外的维度?
更新:请参阅下面的代码。它打印出6x3 weights
张量和1x3 biases
张量,并分别将tf.shape
显示为(2,)
和(1,)
。它们有2个以上的元素,(2,)
和(1,)
真的意味着元素的数量?然而,它们确实对应于尺寸的数量。 ...?
import tensorflow as tf
nInputs = 6
nUnitsLayer1 = 3
weights = tf.Variable(tf.truncated_normal([nInputs, nUnitsLayer1]))
biases= tf.Variable(tf.zeros(nUnitsLayer1))
print 'nInputs', nInputs
print 'nUnitsLayer1', nUnitsLayer1
print 'weights shape', tf.shape(weights)
print 'biases shape', tf.shape(biases)
init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
print 'weights'
print (weights.eval())
print 'biases'
print (biases.eval())
输出:
nInputs 6
nUnitsLayer1 3
weights shape Tensor("Shape:0", shape=(2,), dtype=int32)
biases shape Tensor("Shape_1:0", shape=(1,), dtype=int32)
weights
[[ 0.16274141 -0.20140187 0.05342311]
[ 0.06554962 0.97961253 0.48603743]
[-0.49525094 -0.85534018 -0.49244919]
[ 0.09299681 -1.76659465 -0.64823383]
[ 0.98095983 1.53840697 0.55010611]
[-0.99781513 -1.18230617 0.22286507]]
biases
[ 0. 0. 0.]
答案 0 :(得分:1)
TLDR;您需要print sess.run(tf.shape
而不是print tf.shape
“抽象”张量与实际值之间存在差异。例如,tf.shape(x)
是一个“抽象”张量,表示x
的形状。如果x
排名为2,那么tf.shape
将是具有2个元素的1-D张量。使用静态形状推断在图形构建期间获取此信息,您可以在Tensor上使用.get_shape()
方法查看。 Tensor的__str__
方法似乎也使用来自静态形状推理的信息,这是您在打印时看到的信息。要获得张量的实际值,您需要通过sess.run