Python: Keras erro forma incompatibilidade

votos
3

Eu estou tentando construir um perceptron multicamadas muito simples (MLP) em keras:

model = Sequential()
model.add(Dense(16, 8, init='uniform', activation='tanh'))
model.add(Dropout(0.5))
model.add(Dense(8, 2, init='uniform', activation='tanh'))

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer=sgd)

model.fit(X_train, y_train, nb_epoch=1000, batch_size=50)
score = model.evaluate(X_test, y_test, batch_size=50)

Minha forma de dados de treinamento: X_train.shape(34180, 16)

As etiquetas pertencem à classe de binário com forma y_train.shape(34180,)

Então, meu kerascódigo deve produzir a rede com seguinte conexão:16x8 => 8x2

que produz o erro forma incompatibilidade:

ValueError: Input dimension mis-match. (input[0].shape[1] = 2, input[1].shape[1] = 1)

Apply node that caused the error: Elemwise{sub,no_inplace}(Elemwise{Composite{tanh((i0 + i1))}}[(0, 0)].0, <TensorType(float64, matrix)>)
Inputs types: [TensorType(float64, matrix), TensorType(float64, matrix)]
Inputs shapes: [(50, 2), (50, 1)]
Inputs strides: [(16, 8), (8, 8)]

No Epoch 0at line model.fit(X_train, y_train, nb_epoch=1000, batch_size=50). Estou supervisionando algo óbvio em Keras?

EDIT: Eu tenho ido através da questão aqui , mas não resolve o meu problema

Publicado 13/08/2015 em 19:00
fonte usuário
Em outras línguas...                            


1 respostas

votos
10

Eu tive o mesmo problema e, em seguida, encontrou esta discussão;

https://github.com/fchollet/keras/issues/68

Parece para você declarar uma camada de saída final de 2 ou por qualquer número de categorias os rótulos precisam ser de um tipo categórico, onde essencialmente este é um vetor binário para cada observação por exemplo, um vetor de saída 3 class [0,2,1, 0,1,0] torna-se [[1,0,0], [0,0,1], [0,1,0], [1,0,0], [0,1,0], [1 , 0,0]].

A função np_utils.to_categorical resolvido isso por mim;

from keras.utils import np_utils, generic_utils

y_train, y_test = [np_utils.to_categorical(x) for x in (y_train, y_test)]
Respondeu 04/10/2015 em 19:26
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more