Como treinar e ajustar uma rede neural perceptron multicamadas artificial usando Keras?

votos
4

Estou construindo meu primeiro multicamadas artificial rede neural perceptron usando Keras.

Este é o meu dados de entrada:

digite

Este é meu código que eu usei para construir o meu modelo inicial que basicamente segue o exemplo de código Keras:

model = Sequential()
model.add(Dense(64, input_dim=14, init='uniform'))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(64, init='uniform'))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(2, init='uniform'))
model.add(Activation('softmax'))

sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer=sgd)
model.fit(X_train, y_train, nb_epoch=20, batch_size=16)

Saída:

Epoch 1/20
1213/1213 [==============================] - 0s - loss: 0.1760     
Epoch 2/20
1213/1213 [==============================] - 0s - loss: 0.1840     
Epoch 3/20
1213/1213 [==============================] - 0s - loss: 0.1816     
Epoch 4/20
1213/1213 [==============================] - 0s - loss: 0.1915     
Epoch 5/20
1213/1213 [==============================] - 0s - loss: 0.1928     
Epoch 6/20
1213/1213 [==============================] - 0s - loss: 0.1964     
Epoch 7/20
1213/1213 [==============================] - 0s - loss: 0.1948     
Epoch 8/20
1213/1213 [==============================] - 0s - loss: 0.1971     
Epoch 9/20
1213/1213 [==============================] - 0s - loss: 0.1899     
Epoch 10/20
1213/1213 [==============================] - 0s - loss: 0.1957     
Epoch 11/20
1213/1213 [==============================] - 0s - loss: 0.1923     
Epoch 12/20
1213/1213 [==============================] - 0s - loss: 0.1910     
Epoch 13/20
1213/1213 [==============================] - 0s - loss: 0.2104     
Epoch 14/20
1213/1213 [==============================] - 0s - loss: 0.1976     
Epoch 15/20
1213/1213 [==============================] - 0s - loss: 0.1979     
Epoch 16/20
1213/1213 [==============================] - 0s - loss: 0.2036     
Epoch 17/20
1213/1213 [==============================] - 0s - loss: 0.2019     
Epoch 18/20
1213/1213 [==============================] - 0s - loss: 0.1978     
Epoch 19/20
1213/1213 [==============================] - 0s - loss: 0.1954     
Epoch 20/20
1213/1213 [==============================] - 0s - loss: 0.1949

Como faço para treinar e ajustar esse modelo e obter o meu código para a saída meu melhor modelo preditivo? Eu sou novo para redes neurais e sou apenas totalmente confuso quanto ao que é o próximo passo depois de construir o modelo. Eu sei que eu quero para otimizá-lo, mas eu não tenho certeza que apresenta para ajustar ou se eu deveria fazê-lo manualmente ou como escrever código para fazê-lo.

Publicado 08/01/2016 em 07:08
fonte usuário
Em outras línguas...                            


1 respostas

votos
9

Algumas coisas que você pode fazer são:

  • Mude sua função de perda de mean_squared_errora binary_crossentropy. mean_squared_errordestina-se a regressão, mas você deseja classificar seus dados.
  • Adicionar show_accuracy=Trueà sua fit()função, que gera a exatidão de seu modelo em todas as épocas. Essa informação é provavelmente mais útil para você do que apenas o valor da perda.
  • Adicionar validation_split=0.2à sua fit()função. Atualmente só está treinando em um conjunto de treinamento e validação em nada. Isso é um não-go no aprendizado de máquina que você não pode ter certeza que o seu modelo não tem simplesmente memorizou as respostas corretas para o seu conjunto de dados (sem realmente entender por que essas respostas estão corretas).
  • Mudar de Obama / Romney para o democrata / republicano e adicionar dados de eleições anteriores. ~ 1200 exemplos é um muito pequeno conjunto de dados de redes neurais. Também adicionar colunas com informações valiosas, como taxa de desemprego ou população densidade . Note-se que algum dos valores (como o número de população) são provavelmente similares a fornecer o nome do estado, assim por exemplo, sua rede provavelmente vai aprender que o Texas significa Republican.
  • Se você não tiver feito isso já, normalizar todos os seus valores para o intervalo de 0 a 1 (subtraindo cada valor mínimo da coluna e, em seguida, dividindo pelo (max - min) da coluna). As redes neurais podem lidar com dados normalizados melhores do que os dados não normalizadas.
  • Experimente Adame Adagradem vez de SGD. Às vezes, eles têm melhor desempenho. (Veja a documentação sobre otimizadores .)
  • Tente Activation('relu'), LeakyReLU, PReLUe ELUem vez de Activation('tanh'). Tanh raramente é a melhor escolha. (Ver funções de activação avançada .)
  • Tente aumentar / diminuir o tamanho das camadas densas (por exemplo, de 64a 128). Também tentar adição / remoção de camadas.
  • Tente adicionar BatchNormalizationcamadas (antes das Activationcamadas). (Veja a documentação .)
  • Tente alterar as taxas de desistência (por exemplo, a partir de 0.5a 0.25).
Respondeu 08/01/2016 em 10:55
fonte usuário

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