2017-05-12 237 views
0

所以这里是我的代码充分理解:https://hastebin.com/qigimomika.py为什么我会得到这个ValueError?

所以基本上我有如下的问题:

位上下文:

def weight_variable(shape): 
    initial = tensorflow.truncated_normal(shape, stddev=0.01) 
    return tensorflow.Variable(initial) 

def bias_variable(shape): 
    initial = tensorflow.constant(0.01, shape=shape) 
    return tensorflow.Variable(initial) 

w_layer1 = weight_variable([4, 32]) 
b_layer1 = bias_variable([32]) 

input_layer = tensorflow.placeholder("float", [4]) 

产生错误的行:

h_layer1 = tensorflow.add(tensorflow.matmul(input_layer, w_layer1),b_layer1) 

当运行整个代码(这是上面的)它产生以下ValueError

ValueError: Shape must be rank 2 but is rank 1 for 'MatMul' (op: 'MatMul') 
      with input shapes: [4], [4,32]. 

现在我的问题:会发生什么,我该如何避免这种情况?

感谢您的关注

编辑:感谢修剪和阿里阿巴斯。

我的解决办法:我改变了input_layer到:

input_layer = tensorflow.placeholder("float", [1, 4]) 

的问题是,我的第一阵列是tensorflow秩1([4])和我的第二阵列秩2([4,32])。所以我增加这一行:

state = [state] 

由此状态的输入是:

output_layer.eval(feed_dict={input_layer : state}) 

状态最初是[1,2,3,4](等级1),现在它是〔〔1, 2,3,4]](等级2)。

感谢

EDIT2:好吧,我改变了很多,因为最后的编辑。我迷失了记录它们的变化。如果你想看到我的代码here它是。我知道这太麻烦了。现在我只是洙幸福的那些事是工作。“d你就无法理解我的代码是一团糟,但我只是想记录当前状态的大感谢阿里阿巴斯。:d

+0

欢迎来到StackOverflow。请阅读并遵守帮助文档中的发布准则。 [最小,完整,可验证的示例](http://stackoverflow.com/help/mcve)适用于此处。在发布您的MCVE代码并准确描述问题之前,我们无法为您提供有效的帮助。 我们应该能够将发布的代码粘贴到文本文件中,并重现您描述的问题。 – Prune

+0

感谢您的回复。我改变了一点,所以我希望这样可以。 –

+0

足够接近。我们应该能够将发布的代码粘贴到文本文件中,并重现您描述的问题。对于NN,这应该做。 – Prune

回答

1

我们在这里,因为你知道MatMul操作是典型的矩阵乘法运算,所以如果我们想将两个矩阵相乘,M1M2,具有形状AxBBxC分别,我们应该有相同的形状B我们什么时候想要乘法和结果:

M1 x M2产生矩阵R形状为AxC

所以你的情况,你尝试相乘两个矩阵与形状4x14x32,所以它抛出形状问题的一个错误,你应该调换第一张量,那么你必须:

1x4 MATMUL 4x32结果1x32矩阵。

您的代码在这里:

h_layer1 = tensorflow.add(tensorflow.matmul(input_layer, w_layer1),b_layer1)

使用这样的:

h_layer1 = tensorflow.add(tensorflow.matmul(tf.transpose(input_layer), w_layer1),b_layer1)

如需更详细的回答,您可以打印张量的形状像每一个阶段:

print h_layer1.get_shape()

并看到形状,然后你可以修改你的形状和输入。

祝你好运。

+0

好的再次感谢:D。这不完全是解决方案,但它导致了我。我将编辑我的文章并在那里获得解决方案。 –

+0

很高兴有用回答:) –