Keras extremamente elevada perda, não diminuindo com cada época

votos
1

Estou usando Keras para construir e treinar uma rede neural recorrente.

from keras.models import Sequential
from keras.layers.core import Dense, Activation, Masking
from keras.layers.recurrent import LSTM

#build and train model
in_dimension = 3
hidden_neurons = 300
out_dimension = 2

model = Sequential()
model.add(Masking([0,0,0], input_shape=(max_sequence_length, in_dimension)))
model.add(LSTM(hidden_neurons, return_sequences=True, input_shape=(max_sequence_length, in_dimension)))
model.add(LSTM(hidden_neurons, return_sequences=False))
model.add(Dense(out_dimension))
model.add(Activation('softmax'))

model.compile(loss=categorical_crossentropy, optimizer=rmsprop)
model.fit(padded_training_seqs, training_final_steps, nb_epoch=5, batch_size=1)

padded_training_seqsé uma uma matriz de sequências de [a latitude, a longitude, a temperatura], todos acolchoado para o mesmo comprimento, com valores de [0,0,0]. Quando eu treinar esta rede, a primeira época dá-me uma perda de cerca de 63, e aumenta depois de mais épocas. Isso está causando uma model.predictchamada mais tarde no código para dar valores que estão completamente fora dos valores de treinamento. Por exemplo, a maioria dos valores de formação em cada sequência é de cerca de [40, 40, 20], mas o RNN emite valores consistentemente em torno[0.4, 0.5] , o que me leva a pensar que algo está errado com a camada adesiva.

O treinamento X ( padded_training_seqsdados) é algo como isto (só que muito maior):

[
[[43.103, 27.092, 19.078], [43.496, 26.746, 19.198], [43.487, 27.363, 19.092], [44.107, 27.779, 18.487], [44.529, 27.888, 17.768]], 
[[44.538, 27.901, 17.756], [44.663, 28.073, 17.524], [44.623, 27.83, 17.401], [44.68, 28.034, 17.601], [0,0,0]],
[[47.236, 31.43, 13.905], [47.378, 31.148, 13.562], [0,0,0], [0,0,0], [0,0,0]]
]

eo Y formação ( training_final_steps) os dados se parece com isso:

[
[44.652, 39.649], [37.362, 54.106], [37.115, 57.66501]
]
Publicado 16/03/2016 em 11:22
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Estou um pouco certeza de que você está fazendo mau uso da camada de máscara de Keras. Verifique a documentação aqui para mais detalhes.

Tente usar uma camada de máscara, como:

model.add(Masking(0, input_shape=(max_sequence_length, in_dimension)))

porque acredito que ele só precisa o valor de máscara na dimensão timestep, não o tempo todo-dimensão e valor (ou seja, [0,0,0]).

Melhor da sorte.

Respondeu 15/07/2016 em 21:54
fonte usuário

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