проблема с CNN, MNIST - PullRequest
       46

проблема с CNN, MNIST

0 голосов
/ 24 февраля 2020

Я хочу знать, как гиперпараметры 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: отрицательный размерный размер, вызванный вычитанием 5 из 3 для 'conv2d_135 / convolution' (op: 'Conv2D') с входными формами: [?, 3,3,32], [5,5,32,32].

Я не понимаю, почему, похоже, что второй скрытый слой не принимает (5,5) в качестве размера ядра. спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...