2016-10-10 3 views
0

Когда я тренируюсь на CNN:ValueError при запуске keras в питона

model = Sequential() 
model.add(Convolution2D(4, 5, 5, border_mode='valid', input_shape=(1,28,28))) 
model.add(Activation('tanh')) 
model.add(Convolution2D(8, 3, 3, border_mode='valid')) 
model.add(Activation('tanh')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Convolution2D(16, 3, 3, border_mode='valid')) 
model.add(Activation('tanh')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Flatten()) 
model.add(Dense(128, init='normal')) 
model.add(Activation('tanh')) 
model.add(Dense(10, init='normal')) 
model.add(Activation('softmax')) 
sgd = SGD(l2=0.0,lr=0.05, decay=1e-6, momentum=0.9, nesterov=True) 
model.compile(loss='categorical_crossentropy', optimizer=sgd,class_mode="categorical") 

и TraceBack (самый последний вызов последнего):

Traceback (most recent call last): 
File "F:\eclipse\dasd\aaa\test1.py", line 89, in <module> 
model.add(Dense(128, init='normal')) 
File "D:\Anaconda2\lib\site-packages\keras\models.py", line 308, in add 
output_tensor = layer(self.outputs[0]) 
File "D:\Anaconda2\lib\site-packages\keras\engine\topology.py", line 487, in __call__ 
self.build(input_shapes[0]) 
File "D:\Anaconda2\lib\site-packages\keras\layers\core.py", line 695, in build 
name='{}_W'.format(self.name)) 
File "D:\Anaconda2\lib\site-packages\keras\initializations.py", line 36, in normal 
return K.random_normal_variable(shape, 0.0, scale, name=name) 
File "D:\Anaconda2\lib\site-packages\keras\backend\theano_backend.py", line 145, in random_normal_variable 
return variable(np.random.normal(loc=0.0, scale=scale, size=shape), 
File "mtrand.pyx", line 1903, in mtrand.RandomState.normal (numpy\random\mtrand\mtrand.c:18479) 
File "mtrand.pyx", line 234, in mtrand.cont2_array_sc (numpy\random\mtrand\mtrand.c:3092) 
ValueError: negative dimensions are not allowed 

Не могли бы вы сказать мне, где проблема?

+0

Отслеживайте размер ваших данных от ввода до выходного плотного слоя. Похоже, проблема заключается в согласии в форме вашей матрицы. – Tad

+0

@Tad, но я не запускал данные, только когда я установил модель, возникла проблема –

+0

, и если я удалю «init =« normal », то трассировка: диапазон превышает допустимые границы –

ответ

0

Вам нужно добавить dim_ordering='th' в Convolution2D и MaxPooling2D синус ваш input_shape является (1, 28, 28). Или, если вы не хотите добавлять dim_ordering, вы можете изменить форму ввода на (28, 28, 1).

#!/usr/bin/env python 
# coding=utf-8 
from keras.models import Sequential 
from keras.layers import Dense, Activation, Convolution2D, MaxPooling2D, Flatten 
from keras.optimizers import SGD 

model = Sequential() 
model.add(Convolution2D(4, 5, 5, border_mode='valid', input_shape=(1,28,28), dim_ordering='th')) 
model.add(Activation('tanh')) 
model.add(Convolution2D(8, 3, 3, border_mode='valid', dim_ordering='th')) 
model.add(Activation('tanh')) 
model.add(MaxPooling2D(pool_size=(2, 2), dim_ordering='th')) 
model.add(Convolution2D(16, 3, 3, border_mode='valid',dim_ordering='th')) 
model.add(Activation('tanh')) 
model.add(MaxPooling2D(pool_size=(2, 2), dim_ordering='th')) 
model.add(Flatten()) 
model.add(Dense(128)) 
model.add(Activation('tanh')) 
model.add(Dense(10)) 
model.add(Activation('softmax')) 
sgd = SGD(lr=0.05, decay=1e-6, momentum=0.9, nesterov=True) 
model.compile(loss='categorical_crossentropy', optimizer=sgd,class_mode="categorical") 
print model.summary() 

UPDATE: Вы можете также добавить "image_dim_ordering": "th" в ~/.keras/keras.json. Но я не уверен, где этот файл создается на компьютере под управлением Windows.

+0

Просто не используйте Windows для глубокого обучения. :) – pyan

Смежные вопросы