I am trying to change the lstm_seq2seq.py keras example to change it to the bi-directional lstm model.
https://github.com/keras-team/keras/blob/master/examples/lstm_seq2seq.py
I try different approaches:
the first of these was the direct application of a bidirectional wraper to the LSTM layer:
encoder_inputs = Input(shape=(None, num_encoder_tokens))
encoder = Bidirectional(LSTM(latent_dim, return_state=True))
but I got this error message:
AttributeError Traceback (most recent call last)
<ipython-input-76-a80f8554ab09> in <module>()
75 encoder = Bidirectional(LSTM(latent_dim, return_state=True))
76
78
79 encoder_states = [state_h, state_c]
/home/tristanbf/.virtualenvs/pydev3/lib/python3.5/site-packages/keras/engine/topology.py in __call__(self, inputs, **kwargs)
601
602
604 output_mask = self.compute_mask(inputs, previous_mask)
605
/home/tristanbf/.virtualenvs/pydev3/lib/python3.5/site-packages/keras/layers/wrappers.py in call(self, inputs, training, mask)
293 y_rev = K.reverse(y_rev, 1)
294 if self.merge_mode == 'concat':
296 elif self.merge_mode == 'sum':
297 output = y + y_rev
/home/tristanbf/.virtualenvs/pydev3/lib/python3.5/site-packages/keras/backend/tensorflow_backend.py in concatenate(tensors, axis)
1757 """
1758 if axis < 0:
-> 1759 rank = ndim(tensors[0])
1760 if rank:
1761 axis %= rank
/home/tristanbf/.virtualenvs/pydev3/lib/python3.5/site-packages/keras/backend/tensorflow_backend.py in ndim(x)
597 ```
598 """
600 if dims is not None:
601 return len(dims)
AttributeError: 'list' object has no attribute 'get_shape'
My second guess was to change the input to have something like https://github.com/keras-team/keras/blob/master/examples/imdb_bidirectional_lstm.py :
encoder_input_data = np.empty(len(input_texts), dtype=object)
decoder_input_data = np.empty(len(input_texts), dtype=object)
decoder_target_data = np.empty(len(input_texts), dtype=object)
for i, (input_text, target_text) in enumerate(zip(input_texts, target_texts)):
encoder_input_data[i] = [input_token_index[char] for char in input_text]
tseq = [target_token_index[char] for char in target_text]
decoder_input_data[i] = tseq
decoder_output_data[i] = tseq[1:]
encoder_input_data = sequence.pad_sequences(encoder_input_data, maxlen=max_encoder_seq_length)
decoder_input_data = sequence.pad_sequences(decoder_input_data, maxlen=max_decoder_seq_length)
decoder_target_data = sequence.pad_sequences(decoder_target_data, maxlen=max_decoder_seq_length)
but I got the same error message:
AttributeError Traceback (most recent call last)
<ipython-input-75-474b2515be72> in <module>()
73 encoder = Bidirectional(LSTM(latent_dim, return_state=True))
74
76
77 encoder_states = [state_h, state_c]
/home/tristanbf/.virtualenvs/pydev3/lib/python3.5/site-packages/keras/engine/topology.py in __call__(self, inputs, **kwargs)
601
602
604 output_mask = self.compute_mask(inputs, previous_mask)
605
/home/tristanbf/.virtualenvs/pydev3/lib/python3.5/site-packages/keras/layers/wrappers.py in call(self, inputs, training, mask)
293 y_rev = K.reverse(y_rev, 1)
294 if self.merge_mode == 'concat':
296 elif self.merge_mode == 'sum':
297 output = y + y_rev
/home/tristanbf/.virtualenvs/pydev3/lib/python3.5/site-packages/keras/backend/tensorflow_backend.py in concatenate(tensors, axis)
1757 """
1758 if axis < 0:
-> 1759 rank = ndim(tensors[0])
1760 if rank:
1761 axis %= rank
/home/tristanbf/.virtualenvs/pydev3/lib/python3.5/site-packages/keras/backend/tensorflow_backend.py in ndim(x)
597 ```
598 """
600 if dims is not None:
601 return len(dims)
AttributeError: 'list' object has no attribute 'get_shape'
Any help? Thanks
(Code:
https://gist.github.com/anonymous/c0fd6541ab4fc9c2c1e0b86175fb65c7
)
Jj ed source
share