TensorFow feed_dict为变量添加了额外的维度?

时间:2016-06-16 01:40:30

标签: tensorflow

在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.]

1 个答案:

答案 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