2017-01-29 1 views
0

숫자 인식기를 코딩하려고합니다. 크기가 60000 * 28 * 28 인 이미지의 픽셀 데이터가 들어있는 데이터 집합을 가지고 있는데 여기서 60000은 이미지 개수이고 28은 픽셀 단위의 너비와 높이입니다.모델 피팅 오류

import numpy as np 
import matplotlib.pyplot as plt 
import pandas as pd 
from keras.datasets import mnist 
(x_train, y_train), (x_test, y_test) = mnist.load_data() 
x_train= x_train.reshape(60000, 28, 28, 1).astype('float32') 
x_test= x_test.reshape(10000, 28, 28, 1).astype('float32') 
from keras.models import Sequential 
from keras.layers import Convolution2D 
from keras.layers import MaxPooling2D 
from keras.layers import Flatten 
from keras.layers import Dense 
classifier= Sequential() 
classifier.add(Convolution2D(32, 3, 3, input_shape= (28, 28, 1), activation= 'relu')) 
classifier.add(MaxPooling2D(pool_size= (2, 2))) 
classifier.add(Flatten()) 
classifier.add(Dense(output_dim = 128, activation= 'relu')) 
classifier.add(Dense(output_dim = 10, activation= 'softmax')) 
classifier.compile(optimizer= 'adam', loss='binary_crossentropy', metrics = ['accuracy']) 
classifier.fit(x_train, y_train, validation_data= (x_test, y_test), nb_epoch= 15, verbose= 2, batch_size= 100) 

다음 오류가 발생합니다.

classifier.fit(x_train, y_train, validation_data= (x_test, y_test), nb_epoch= 15, verbose= 2, batch_size= 100) 
Traceback (most recent call last): 
    File "<ipython-input-4-9425b6d029dc>", line 1, in <module> 
    classifier.fit(x_train, y_train, validation_data= (x_test, y_test), nb_epoch= 15, verbose= 2, batch_size= 100) 
    File "C:\Users\SHUBHAM\Anaconda3\lib\site-packages\keras\models.py", line 672, in fit 
    initial_epoch=initial_epoch) 
    File "C:\Users\SHUBHAM\Anaconda3\lib\site-packages\keras\engine\training.py", line 1117, in fit 
    batch_size=batch_size) 
    File "C:\Users\SHUBHAM\Anaconda3\lib\site-packages\keras\engine\training.py", line 1034, in _standardize_user_data 
    exception_prefix='model target') 
    File "C:\Users\SHUBHAM\Anaconda3\lib\site-packages\keras\engine\training.py", line 124, in standardize_input_data 
    str(array.shape)) 
ValueError: Error when checking model target: expected dense_2 to have shape (None, 10) but got array with shape (60000, 1) 

나는 어떤 문제가 발생하지 않습니다. 도와주세요.

답변

1

출력 모양과 관련된 오류가 있습니다. NN 코드에서 볼 수 있듯이 classifier.add(Dense(output_dim = 10, activation= 'softmax')) 출력의 모양은 [recordCount, 10]이어야합니다. 내가 파이썬 콘솔을 실행하고 다음 입력 할 때 는하지만 - 나는 0..9 범위에서 잘못된 y_train 모양을 y_train의

>>> from keras.datasets import mnist 
Using Theano backend. 
Using gpu device 0: GeForce GT 730 (CNMeM is enabled with initial size: 70.0% of memory, cuDNN not available) 
>>> (x_train, y_train), (x_test, y_test) = mnist.load_data() 
Downloading data from https://s3.amazonaws.com/img-datasets/mnist.pkl.gz 
15253504/15296311 [============================>.] - ETA: 0s>>> 
>>> x_train.shape 
(60000, 28, 28) 
>>> y_train.shape 
(60000,) 

및 값을 참조하십시오. 그래서 저는 다음 변환을 할 것을 제안 할 수 있습니다.

>>> import numpy 
>>> y_train_new = numpy.zeros([60000, 10]) 
>>> for i in range(0, 10): 
...  y_train_new[:, i] = (y_train == i).astype(numpy.int32) 
+0

Thanx Alex. 실행은 더 나아가고 있습니다. –