使用tensorflow在训练神经网络中出现错误:

ValueError: Dimensions must be equal, but are 784 and 10 for 'add' (op: 'Add') with input shapes: [784,784], [10].

出现这种错误一般就是输入,输出矩阵,和   tf.matmul(weight, x) + bias 计算中矩阵不能相乘所造成的

matmul(weight, x)函数表示行数为weight,列数为x的矩阵

说白了就是矩阵相乘维度不一致导致,

比如输入矩阵为:49x2      输出矩阵为:49x3

整个网络计算的矩阵维度要一致,可以相乘。49x2   2x50  50x21  21x3   计算到最后得到  49x3正好是输出

#定义两个placeholder
x = tf.placeholder(tf.float32, [None, 784])
y = tf.placeholder(tf.float32, [None, 10])
input_num=784
output_num=10
#神经网络层
weight = tf.Variable(tf.zeros([784, 10]))
bias = tf.Variable(tf.zeros([10]))
predict = tf.matmul(weight, x) + bias

none*784  ×  784*mm  x  mm*10 矩阵相乘 结果为none*10 正好为输出y的矩阵形式,这样才可以进行计算
mm为任意数,这个在矩阵乘法中可以约掉


例如:

矩阵乘法是最常见的方法,也是在深度神经网络中用的很多的加权求和中的加权操作。两个矩阵做乘法,必须满足第一个矩阵的第二维和第二个矩阵的第一维要相等,结果的维度等于第一个矩阵的第一维和第二个矩阵的第二维。 比如mn的矩阵和np的矩阵,结果为m*p维矩阵。计算过程是第一个矩阵的每一行和第二个矩阵的每一列,即两个向量相乘。

GitHub 加速计划 / te / tensorflow
184.55 K
74.12 K
下载
一个面向所有人的开源机器学习框架
最近提交(Master分支:2 个月前 )
a49e66f2 PiperOrigin-RevId: 663726708 2 个月前
91dac11a This test overrides disabled_backends, dropping the default value in the process. PiperOrigin-RevId: 663711155 2 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐