我还在学习如何实现tflearn网络,所以请耐心一些。我尝试了tflearn的示例代码,来自这里:https://github.com/tflearn/tflearn/blob/master/examples/images/convnet_cifar10.py
奇怪的是,损失值从未下降,在整个训练过程中,我看到的验证准确率始终是10%(在这个数据集上相当于随机猜测)。
然而,仅仅是注释掉2D卷积和最大池化操作,验证准确率在前10个周期内就跳到了0.47。
这是修改后的代码,似乎能得到更好的结果。其余代码与上述链接中的相同
network = input_data(shape=[None, 32, 32, 3], data_preprocessing=img_prep, data_augmentation=img_aug)#network = conv_2d(network, 32, 3, activation='relu')#network = max_pool_2d(network, 2)#network = conv_2d(network, 64, 3, activation='relu')#network = conv_2d(network, 64, 3, activation='relu')#network = max_pool_2d(network, 2)network = fully_connected(network, 512, activation='relu')network = dropout(network, 0.5)network = fully_connected(network, 10, activation='softmax')network = regression(network, optimizer='adam', loss='categorical_crossentropy', learning_rate=0.001)
我只是有点担心和困惑,tflearn网站上给出的示例实现,在实现2D卷积步骤时会产生随机分类。其他人之前有遇到过这种情况吗?或者有人能帮我解释一下为什么会发生这种情况吗?或者这是否是conv_2d代码中潜在bug的症状?
回答:
原来是CUDA或CudNN库中出现了错误。如果我在运行脚本前关闭GPU计算,损失值会立即下降,验证准确率也会上升。
export CUDA_VISIBLE_DEVICES=''python .....