前提・実現したいこと
KerasでLSTMとAttentionを用いて自然言語処理を行おうとしています。
Keras
1from keras import layers 2 3x = layers.LSTM(300, return_sequences=True, dropout=0.5, recurrent_dropout=0.1)(x) 4x = Attention()(x)
上記のように用いていた自作のAttentionレイヤーを下記のように、return_sequence = Falseにしたlstmの出力xと、input2の次元数をlstmに合わせた出力input2_300とをコンカットしたものに使用したいと考えています。(2つのtensorに関するAttentionを行いたい)
該当のソースコード
Keras
1from keras import layers, Input 2from Attention import Attention 3 4x = layers.LSTM(300, return_sequences=False, dropout=0.5, recurrent_dropout=0.1)(x) 5x = layers.Lambda(lambda x: K.repeat(x, 1))(x) 6input2 = Input(shape=(1,)) 7input2_300 = layers.Dense(300)(input2) 8input2_300= layers.Lambda(lambda x: K.repeat(x, 1))(input2_300) 9concatenated = layers.concatenate([x, input2_300], axis=1) 10attn_output = Attention()(concatenated)
repeatはそれぞれ3階テンソルにするために行いました。コンカットまではうまくいきshapeも(?, 2, 300)となり、前回使っていた時の形と合わせることができたのですがうまくいきません。
下記のエラーメッセージがint型だからダメということはわかるのですが、そもそもどこでint型を使っているかもわからず苦戦しています。
どなたか教えていただけないでしょうか?よろしくお願い致します。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "run.py", line 85, in <module> attn_output = Attention()(concatenated) File "C:\Users\Me\AppData\Local\Programs\Python\Python37\lib\site-packages\keras\engine\base_layer.py", line 4 63, in __call__ self.build(unpack_singleton(input_shapes)) File "C:\Users\Me\Dropbox\bns\common\AttentionWithContext.py", line 34, in build constraint=self.constraint) File "C:\Users\Me\AppData\Local\Programs\Python\Python37\lib\site-packages\keras\engine\base_layer.py", line 2 79, in add_weight weight = K.variable(initializer(shape, dtype=dtype), ーーーーーーー(長いため省略)------------ File "C:\Users\Me\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\framework\tensor_ util.py", line 509, in make_tensor_proto shape = [int(dim) for dim in shape] TypeError: 'int' object is not iterable
あなたの回答
tips
プレビュー