【发布时间】:2019-03-29 05:50:42
【问题描述】:
我有一个包含 25000 张彩色图片 100*100(*3) 的数据集,我正在尝试构建一个带有一个卷积层的简单神经网络。它的细胞图片是否被疟疾感染,所以我的输出是 2。 但似乎我的尺寸不匹配,我不知道我的错误来自哪里。
我的神经网络:
def simple_nn(X_training, Y_training, X_test, Y_test):
input = 100*100*3
batch_size = 25
X = tf.placeholder(tf.float32, [batch_size, 100, 100, 3])
#Was:
# W = tf.Variable(tf.zeros([input, 2]))
# b = tf.Variable(tf.zeros([2]))
#Now:
W = tf.Variable(tf.truncated_normal([4, 4, 3, 3], stddev=0.1))
B = tf.Variable(tf.ones([3])/10) # What should I put here ??
init = tf.global_variables_initializer()
# model
#Was:
# Y = tf.nn.softmax(tf.matmul(tf.reshape(X, [-1, input]), W) + b)
#Now:
stride = 1 # output is still 28x28
Ycnv = tf.nn.conv2d(X, W, strides=[1, stride, stride, 1], padding='SAME')
Y = tf.nn.relu(Ycnv + B)
# placeholder for correct labels
Y_ = tf.placeholder(tf.float32, [None, 2])
# loss function
cross_entropy = -tf.reduce_sum(Y_ * tf.log(Y))
# % of correct answers found in batch
is_correct = tf.equal(tf.argmax(Y,1), tf.argmax(Y_,1))
accuracy = tf.reduce_mean(tf.cast(is_correct, tf.float32))
learning_rate = 0.00001
optimizer = tf.train.GradientDescentOptimizer(learning_rate)
train_step = optimizer.minimize(cross_entropy)
sess = tf.Session()
sess.run(init)
#Training here...
我的错误:
Traceback (most recent call last):
File "neural_net.py", line 135, in <module>
simple_nn(X_training, Y_training, X_test, Y_test)
File "neural_net.py", line 69, in simple_nn
cross_entropy = -tf.reduce_sum(Y_ * tf.log(Y))
...
ValueError: Dimensions must be equal, but are 2 and 3 for 'mul' (op: 'Mul') with input shapes: [?,2], [25,100,100,3].
我之前使用了一个简单的图层,它正在工作。我改变了我的体重和偏见,老实说,我不知道为什么我的偏见是这样设置的,我遵循了一个教程(https://codelabs.developers.google.com/codelabs/cloud-tensorflow-mnist/#11)但没有解释。 我还将我的 Y 替换为 conv2D。 如果我想得到一个大小为 2*1 的向量,我不知道我的输出应该是什么。
【问题讨论】:
-
错误到底发生在哪里?请花时间创建一个 minimal reproducible example 来演示您的问题,删除所有不需要重现它的代码。 (我还建议将您的模型更改为仅具有范围从 0 到 1 的单个输出,其中 0 代表健康,1 代表受感染的细胞,然后可以将其解释为概率。)
-
对不起,我忘了复制我的错误,我删除了一些代码
-
我也不知道怎么机会输出,恐怕我不明白如何使用过滤器
-
代码还是很多的。我建议你尽量删除和简化。从外观上看,我相信
Y的形状为(None, 3),但您的Y_的形状为(None, 2)。如果您刚开始使用 CNN,发现自己在所有维度之间有点迷失,我的建议是研究 Keras(tf.keras 或标准 keras),它作为高级 API 可以让您从很多方面解脱这些考虑因素。
标签: python-3.x tensorflow conv-neural-network