简单Tensorflow CNN分割的测试集精度较低



我修改了https://www.tensorflow.org/get_started/mnist/mnist/pros/将其作为图像分割而不是分类问题构成。输入为60x60倒数采样的MRI图像(重塑为[1,3600]),输出是分割为0到1范围的分割(在0.5处阈值到二进制掩码)。当我运行它时,我会在培训集中获得非常合理的细分和高骰子(0.99)。但是,测试组仅达到0.8的骰子。这听起来像是过度拟合,但该模型非常简单:Conv Layer-Max池-Conv layer-dropOut Preptiction。因此,只有3组重量和偏见,我不确定问题过度是问题所在。对于正则化,我使用的是辍学率为10%。我尝试了50%的辍学,也尝试了L1 -Norm正则化 - 这没有什么不同。我最初在训练集中使用了300张图像,为测试集使用了184张图像。上升到740-740,没有改变。测试集的骰子几乎确切地坚持为0.8。当我运行假装培训数据的代码是测试数据时,我的DICE几乎相同(但并非绝对相同)。非常感谢您的建议。

W_conv1 = weight_variable([5, 5, 1, 32])
b_conv1 = bias_variable([32])
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
# Pooling layer - downsamples by 2X.
h_pool1 = max_pool_2x2(h_conv1)
# Second convolutional layer -- maps 32 feature maps to 64.
W_conv2 = weight_variable([5, 5, 32, 64])
b_conv2 = bias_variable([64])
h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
# Second pooling layer.
h_pool2 = max_pool_2x2(h_conv2)
# Fully connected layer 1 -- after 2 round of downsampling, our 28x28 image
# is down to 7x7x64 feature maps -- maps this to 1024 features.
W_fc1 = weight_variable([15 * 15 * 64, 1024])
b_fc1 = bias_variable([1024])
h_pool2_flat = tf.reshape(h_pool2, [-1, 15*15*64])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)
# Dropout - controls the complexity of the model, prevents co-adaptation of
# features.
keep_prob = tf.placeholder(tf.float32)
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)
# Map the 1024 features to 10 classes, one for each digit
W_fc2 = weight_variable([1024, 3600])
b_fc2 = bias_variable([3600])
y_conv = tf.matmul(h_fc1_drop, W_fc2) + b_fc2 

p.s。:我的损失函数是平方平方的差异tf.reduce_mean(tf.reduce_mean(tf.multiply)(y__-y__conv,y__-y_conv))),而不是显式。

确实过度拟合:如果您想比较训练示例和参数数量,则参数数量远远超过示例数。但是,即使过度拟合,我也不认为骰子0.8很低。

建议:您可能想知道完全卷积网络(FCN)。

最新更新