使用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维矩阵。计算过程是第一个矩阵的每一行和第二个矩阵的每一列,即两个向量相乘。