CNN,MNIST遇到问题

时间:2020-02-24 07:23:20

标签: keras-layer mnist cnn

我想知道CNN的超参数如何影响准确性,所以我编写了以下代码:


from numpy.random import seed
seed(1)
import tensorflow 
tensorflow.random.set_seed(2)
from keras import layers
from keras import models
import matplotlib.pyplot as plt
from keras.datasets import mnist
from keras.utils import to_categorical
done=[[0 for i in range(7)] for j in range(100)]
done[0][0]='filter1'
done[0][1]='filter2'
done[0][2]='noyeau1'
done[0][3]='noyeau2'
done[0][4]='epochess'
done[0][5]='batch'
done[0][6]='precision'
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
train_images = train_images.reshape((60000, 28, 28, 1))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((10000, 28, 28, 1))
test_images = test_images.astype('float32') / 255
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
y0=1
batch=[32,64,128]
epochss=[4,10]
noyeau1=[3,5,7]
noyeau2=[3,5,7]
filterr1=[32,64,128]
filterr2=[32,64,128]
y0=1
for i in range(3):
 for j in range(3):
    model = models.Sequential()
    model.add(layers.Conv2D(filterr1[i], (noyeau1[i], noyeau1[i]), activation='relu', input_shape=(28, 28, 1)))
    model.add(layers.MaxPooling2D((2, 2)))
    model.add(layers.Conv2D(filterr2[j], (noyeau2[j],noyeau2[j]), activation='relu'))
    model.add(layers.MaxPooling2D((2, 2)))
    model.add(layers.Conv2D(filterr2[j], (noyeau2[j],noyeau2[j]), activation='relu'))
    model.summary()
    model.add(layers.Flatten())
    model.add(layers.Dense(64, activation='relu'))
    model.add(layers.Dense(10, activation='softmax'))  
    model.summary()
    model.compile(optimizer='rmsprop',
                  loss='categorical_crossentropy',
                  metrics=['accuracy'])
    for s in range(2):
        for l in range(3):        
            history =model.fit(train_images, train_labels, epochs=epochss[s], batch_size=batch[l])
            test_loss, test_acc = model.evaluate(test_images, test_labels)
            print('test_acc',test_acc)
            done[y0][0]=filterr1[i]
            done[y0][1]=filterr2[j]
            done[y0][2]=noyeau1[i]
            done[y0][3]=noyeau2[j]
            done[y0][4]=epochss[s]
            done[y0][5]=batch[l]
            done[y0][6]=test_acc
            y0=y0+1

但是当我运行它时,出现此错误:

ValueError:负尺寸大小是由于输入形状为[?,3,3,32],[5,5,32,32]的'conv2d_135 / convolution'(op:'Conv2D')的3减去5引起的

我不明白为什么,似乎第二个隐藏层不接受(5,5)作为内核大小。 谢谢

0 个答案:

没有答案