Como preparar um conjunto de dados para Keras?

votos
15

Motivação

Para executar um conjunto de vetores rotulados através Keras rede neural.

Exemplo

Olhando para Keras exemplo dataset mnist:

keras.datasets import mnist
(x_tr, y_tr), (x_te, y_te) = mnist.load_data()
print x_tr.shape

Ele parece ser uma matriz numpy dimensional 3:

(60000, 28, 28)
  • 1 dimensão é para as amostras
  • 2º e 3º para cada características da amostra

Tentativa

Construir os vetores rotulados:

X_train = numpy.array([[1] * 128] * (10 ** 4) + [[0] * 128] * (10 ** 4))
X_test = numpy.array([[1] * 128] * (10 ** 2) + [[0] * 128] * (10 ** 2))

Y_train = numpy.array([True] * (10 ** 4) + [False] * (10 ** 4))
Y_test = numpy.array([True] * (10 ** 2) + [False] * (10 ** 2))

X_train = X_train.astype(float32)
X_test = X_test.astype(float32)

Y_train = Y_train.astype(bool)
Y_test = Y_test.astype(bool)

O código de formação

model = Sequential()
model.add(Dense(128, 50))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(50, 50))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(50, 1))
model.add(Activation('softmax'))

rms = RMSprop()
model.compile(loss='binary_crossentropy', optimizer=rms)

model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch,
          show_accuracy=True, verbose=2, validation_data=(X_test, Y_test))

score = model.evaluate(X_test, Y_test, show_accuracy=True, verbose=0)
print('Test score:', score[0])
print('Test accuracy:', score[1])

Resultado

Test score: 13.9705320154
Test accuracy: 1.0

Por que recebo um resultado tão ruim para um conjunto de dados tão simples? É o meu conjunto de dados malformada?

Obrigado!

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


1 respostas

votos
8

A softmax em apenas um nó de saída não faz muito sentido. Se você mudar model.add(Activation('softmax'))para model.add(Activation('sigmoid')), a rede funciona bem.

Alternativamente, você também pode usar dois nós de saída, onde 1, 0representa o caso de Truee 0, 1representa o caso de False. Então você pode usar uma camada softmax. Você apenas tem que mudar o seu Y_traine Y_testconformidade.

Respondeu 07/08/2015 em 17:03
fonte usuário

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