CNN在我的Theano数据集上效果不佳

时间:2016-01-07 19:39:31

标签: python neural-network theano convolution conv-neural-network

我想将theano中的convolutional_mlp应用于我自己的数据集。但CNN不能很好地适应我的数据集,我找不到它的原因。在下文中,我将详细描述我的数据集,有人可以帮助我吗?非常感谢!

数据集: 我的目标是使用CNN将我的图像(大小为28 * 28 = 784)分为两种类型,0和1。 我的原始数据是csv文件,datax.csv和datay.csv。在datax.csv中,每行存储每个图像的每个像素的灰度值,而在datay.csv中,每行是每个图像的标签。 datax.csv(1000行和784列)

enter image description here

datay.csv(1000行)

0;1;1;0;1;0;1;1;1;0;1....

根据上面的csv数据,我通过Python代码构建我的数据集(' myDataset.pkl.gz'),如下所示:

from numpy import genfromtxt
import gzip, cPickle
train_set_x = genfromtxt('data/1_datax.csv', delimiter=',')
train_set_y = genfromtxt('data/1_datay.csv', delimiter=',')
val_set_x = genfromtxt('data/2_datax.csv', delimiter=',')
val_set_y = genfromtxt('data/2_datay.csv', delimiter=',')
test_set_x = genfromtxt('data/3_datax.csv', delimiter=',')
test_set_y = genfromtxt('data/4_datay.csv', delimiter=',')

train_set = train_set_x, train_set_y
val_set = val_set_x, val_set_y
test_set = test_set_x, val_set_y

dataset = [train_set, val_set, test_set]


f = gzip.open('myDataset.pkl.gz','wb')
cPickle.dump(dataset, f, protocol=2)
f.close()enter code here

构建我的数据集后,我在convolutional_mlp.py中使用它,替换mnist.pkl.gz。 在我的数据集中,分别在训练,验证和测试数据集中有1000个示例,500个示例和500个示例。所以在convolutional_mlp.py中,我将batch_size设置为500.然后分别在训练,验证和测试数据集中有2个小批量,1个小批量和1个小批量。我也让n_out为2.然后我运行代码,并打印每个纪元的训练错误。结果如下:

enter image description here

无论运行多少个纪元,验证错误都不会改变。事实上,我已经将学习率从0.1,0.01,0.001改为......但结果从未改变。 我想知道为什么会发生这种情况,有人可以帮助我吗?非常感谢你!

1 个答案:

答案 0 :(得分:0)

您的培训,验证和测试数据集看起来完全不同。我的意思是,可能是您的数据集按某些特征值或输出进行排序,这样训练集和验证集就没有彼此相同的特征。这种情况的一个示例是,您在训练集中只有0-3,验证集中为4-6,对于MNIST数据分区的测试集中为7-9。

如果您阅读所有三个数据集,随机播放它们然后将它们分成三组,它会更好。通常,人们使用7:2:1或8:1:1的比较尺寸,验证尺寸和测试尺寸。这种分裂后模型会更好地学习,并且会提高准确性。

此外,我建议你使用较小的小批量,可能是32或64.这将导致每个时期的准确性提高。我希望它有所帮助。