2017-04-04 1 views
0

J'essaie d'exécuter un CNN 1D sur des segments 10s de données EEG, puis de couvrir une connexion temporelle entre les segments en utilisant un RNN.combinant RNN et CNN avec lasagnes

Le problème est que le RNN attend une entrée avec batch_size x sequence_length x num_inputs tandis que les sorties CNN batch_size x num_filters x sequence_length

Ceci peut être résolu par une couche aléatoire faible

network = L.InputLayer(shape=(None, data_size[1], data_size[2]), input_var=input_var) 
network = L.Conv1DLayer(network, num_filters=32, filter_size = 5) 
network = L.DimshuffleLayer(network, (0, 2, 1)) 
network = L.LSTMLayer(network, 200) 

Mais à ma compréhension de la RNN couvrirons maintenant connexions temporelles seulement dans la longueur de la séquence, mais pas entre les différents lots, est-ce exact?

Comment puis-je obtenir la connexion temporelle entre les segments?

Répondre

0

répondre à ma propre question:

Le RNN va en effet apprendre que les dépendances au sein d'un lot. Cependant, Keras a un mode qui permet aux États de transition entre les lots: stateful=True

network = keras.layers.LSTM(network, stateful=True)

Maintenant, il est important de nourrir les lots dans l'ordre: L'élément i-ième de chaque lot sera appris avec l'état du i-ème lot à l'instant t-1. Cela signifie que vous devez être très prudent lors de l'alimentation de vos lots. Notez que cela ne fera que transférer les états de cellule et ne pas rétropropager entre les lots. En tant qu'effet secondaire, votre état initial tout en prévoyant devra être défini et biaiser vos résultats.