2017-01-30 7 views
2

Я пытаюсь визуализировать вывод каждого сверточного слоя в keras, следуя этой ссылке: MNIST Visualisation. Я изменил некоторые слои, чтобы удалить ошибки, но теперь я застрял в Dense Layer Error.Keras Dense Layer Error: TypeError: объект 'int' не является вызываемым

np.set_printoptions(precision=5, suppress=True) 
np.random.seed(1337) # for reproducibility 

nb_classes = 10 

# the data, shuffled and split between tran and test sets 
(X_train, y_train), (X_test, y_test) = mnist.load_data("mnist.pkl") 

X_train = X_train.reshape(X_train.shape[0], 1, 28, 28) 
X_test = X_test.reshape(X_test.shape[0], 1, 28, 28) 
X_train = X_train.astype("float32") 
X_test = X_test.astype("float32") 
X_train /= 255 
X_test /= 255 
print('X_train shape:', X_train.shape) 
print(X_train.shape[0], 'train samples') 
print(X_test.shape[0], 'test samples') 

# convert class vectors to binary class matrices 
Y_train = np_utils.to_categorical(y_train, nb_classes) 
Y_test = np_utils.to_categorical(y_test, nb_classes) 

i = 4600 
pl.imshow(X_train[i, 0], interpolation='nearest', cmap=cm.binary) 
print("label : ", Y_train[i,:]) 

model = Sequential() 

model.add(Convolution2D(32, 3, 3, border_mode='same',input_shape = (1,28,28))) #changed border_mode from full -> valid 
convout1 = Activation('relu') 
model.add(convout1) 
model.add(Convolution2D(32, 32, 3)) 

convout2 = Activation('relu') 
model.add(convout2) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Dropout(0.25)) 

model.add(Flatten()) 

model.add(Dense(32*196, 128)) #ERROR HERE 

Любые комментарии или предложения высоко оценены. Спасибо.

ответ

2

Если вы проверите документацию слоя Dense, вы заметите, что первым аргументом, который он принимает, является форма вывода, а вторая - init, которая описывает способ запуска весов слоя. В вашем случае вы предоставили int в качестве второго позиционного аргумента, и это вызвало ошибку. Вы должны изменить код (при условии, что вы хотите, выход в виде 128-мерного вектора):

model.add(Dense(128)) 
+0

Спасибо за Ваш комментарий Marcin, я изменил его model.add (Плотные (128)), но я получил ошибку «OverflowError: Range превышает допустимые границы». Вы, наверное, знаете, почему? – matchifang

+0

С какой строки кода? –

+0

строка с ошибкой. Я изменил его с model.add (Dense (32 * 196, 128)) на model.add (Dense (128)) – matchifang