繁体   English   中英

ValueError:Shape必须是2级,但是'MatMul'的排名是3

[英]ValueError: Shape must be rank 2 but is rank 3 for 'MatMul'

我有以下TensorFlow代码:

layer_1 = tf.add(tf.matmul(tf.cast(x, tf.float32), weights['h1']), biases['b1'])

但是抛出以下错误:

ValueError: Shape must be rank 2 but is rank 3 for 'MatMul' (op: 'MatMul') with input shapes: [?,5741,20000], [20000,128].

它说x的形状为(?,5741,20000)。 我怎样才能将x的形状转换为(5741,20000)?

先感谢您!

我建议使用张量点积而不是简单矩阵乘法,以保持批量大小。 这个答案比@mrry更通用

layer_1 = tf.add(tf.tensordot(tf.cast(x, tf.float32), weights['h1'], [[2], [0]]), biases['b1'])

看起来你正试图将'x'与'权重'进行矩阵乘法运算。 对于一个示例,x的形状为[5741,20000],但是当您批量提供示例时,x将具有[?,5741,20000]的形状。 同样,权重也应该具有[?,20000,128]的形状。 但是,从错误中看,你的权重看起来仍然是[20000,128],这告诉我你的代码中有一些问题没有将权重变量转换为形状[?,20000,128]。 当你能想到这一点时,错误就会消失。 矩阵乘法的结果应该是[?,5741,128]的形状

假设x的动态形状x(1, 5741, 20000)可以将其形状变换到(5741, 20000)使用tf.squeeze()如下:

x = tf.squeeze(x, axis=[0])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM