質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%

Q&A

解決済

1回答

1588閲覧

Tensorflowを用いてAttentionを実行する方法

退会済みユーザー

退会済みユーザー

総合スコア0

0グッド

0クリップ

投稿2021/08/11 07:43

前提・実現したいこと

ここに質問の内容を詳しく書いてください。

tensorflowを用いてAttentionを実行しようとしています。
tensorflow1からtensorflow2に書き換えを行っている途中でエラーが出ました。
tensorflowについては初心者です。

発生している問題・エラーメッセージ

from tensorflow.keras.layers.Attention import Recurrent ModuleNotFoundError: No module named 'tensorflow.keras.layers.Attention'

該当のソースコード

ソースコード

試したこと

自分なりに調べて解決しようとしたのですが、できませんでした。また、compat.v1を用いて実行しようとしたところ同じエラーが発生してしまいました。attentionの使用方法自体が間違っている可能性もあると考えています。

補足情報(FW/ツールのバージョンなど)

python 3.6.12
tensorflow 2.5.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2021/08/11 08:13

from tensorflow import keras は、できますでしょうか?
退会済みユーザー

退会済みユーザー

2021/08/11 09:09

返信ありがとうございます。今やってみたところ何も変化はありませんでした。
jbpb0

2021/08/12 05:54 編集

from tensorflow import keras でエラーにならないなら、下記はどうでしょうか? from tensorflow.keras import layers from tensorflow.keras.layers import Attention
退会済みユーザー

退会済みユーザー

2021/08/11 20:53

返信が遅れて申し訳ないです。 import Attention でエラーが発生してしまいます。 下記がエラーコードです。 import Attention ModuleNotFoundError: No module named 'Attention'
jbpb0

2021/08/12 05:56 編集

from tensorflow.keras.layers import Attention は1行です 「from...Attention」を、途中で改行しないで1行に入力してください (うっかり改行して書いていたので、直しました) あと、 from tensorflow.python.keras.layers.dense_attention import Attention は、どうでしょうか? こちらも1行なので、途中で改行しないでください
退会済みユーザー

退会済みユーザー

2021/08/12 06:32

両者を実行した場合、エラーコードが下記になりました。 from tensorflow.keras.layers.Attention import Recurrent ModuleNotFoundError: No module named 'tensorflow.keras.layers.Attention' あと、importした際にすべてコメントアウトしたような表記になるのですが、大丈夫でしょうか?
jbpb0

2021/08/12 06:41 編集

私が書いたコードのみ、一つずつ実行して、それぞれの結果を教えてください > ModuleNotFoundError: No module named 'tensorflow.keras.layers.Attention' は、 > from tensorflow.keras.layers import Attention を実行した際のエラーですか? > from tensorflow.python.keras.layers.dense_attention import Attention を実行した際は、どうなりますか? エラーが出るとしても、たぶんエラーの表示内容は変わると思いますので、お手数ですがそれをそのまま書いてください
jbpb0

2021/08/12 06:56 編集

確認ですが、 > tensorflow1からtensorflow2に書き換えを行っている途中でエラーが出ました。 とは、TF 1.* では正常に動いたコードが TF 2.* ではエラーが出る、という意味ですよね? > from tensorflow.keras.layers.Attention import Recurrent を、当方の tensorflow 1.15.3 が入ってるPythonで実行したところ、「No module named 'tensorflow.keras.layers.Attention'」というエラーが出るのですが、質問者さんの環境では、このコードを TF 1.* で実行できたのですか?
退会済みユーザー

退会済みユーザー

2021/08/12 06:59

> エラーが出るとしても、たぶんエラーの表示内容は変わると思いますので、お手数ですがそれをそのまま書いてください お手数をおかけします。 それぞれのコードのみを実行した場合ですとエラーは出ないのですが、既存のコードに組み込んで実行した際のエラーは、 from tensorflow.keras.layers.Attention import Recurrent ModuleNotFoundError: No module named 'tensorflow.keras.layers.Attention' で同じものが出てきます。 > コードをどのようにして実行してますか? メインのguiを実行するコードがあり、その他付属の機能が複数に分かれています。このコードはattentionの機能を実装するためのコードとなっています。IDEはPyCharmです。
jbpb0

2021/08/12 07:07

上にも書きましたけど、当方の環境では、tensorflow 1.15.3 でも 「from tensorflow.keras.layers.Attention import Recurrent」 はエラーになります そちらの環境で、TF 1.* で動いていた「既存のコード」での実際の記述は、 「from tensorflow.keras.layers.Attention import Recurrent」 ですか? 「from keras.layers import recurrent」 とかではないですか?
退会済みユーザー

退会済みユーザー

2021/08/12 07:09 編集

>TF 1.* では正常に動いたコードが TF 2.* ではエラーが出る、という意味ですよね? 他者からの引継ぎでバージョンを変更しようとしているため、自分でこのコードをTF1.*で動かしていたわけではないですが、TF1.*での動作は確認しています。
退会済みユーザー

退会済みユーザー

2021/08/12 07:10

> 「from keras.layers import recurrent」 とかではないですか? はい、「from tensorflow.keras.layers.Attention import Recurrent」で間違いないです。
jbpb0

2021/08/12 07:12

> 他者からの引継ぎでバージョンを変更しようとしている その「他者」が、TF 2.* に移植しようとして書き換えていた、という可能性はありませんか?
jbpb0

2021/08/12 07:30 編集

先ほど当方で確認したのはMacでしたが、WindowsのPythonでも確認しました やはり、「from tensorflow.keras.layers.Attention import Recurrent」は「No module named 'tensorflow.keras.layers.Attention'」というエラーになりました 試したTFのバージョンは、こちらもMacと同じバージョンの tensorflow 1.15.3 です もっと古いバージョンならばエラーにならなかったのかもしれませんが、TF 1.* の最終バージョンである TF 1.15 では、TF 2.* と同じエラーになります > TF1.*での動作は確認しています。 そのときのバージョンは分かりませんか?
退会済みユーザー

退会済みユーザー

2021/08/12 07:30

すみません。ただいまもう一度確認したところ、 「from tensorflow.keras.layers.Attention import Recurrent」ではなく 「from keras.layers.recurrent import Recurrent」でした。申し訳ないです。 >「他者」が、TF 2.* に移植しようとして書き換えていた、という可能性はありませんか? その可能性はないと思います。
退会済みユーザー

退会済みユーザー

2021/08/12 07:33

> そのときのバージョンは分かりませんか? その時のバージョンは分かりません。すみません。
jbpb0

2021/08/12 08:27 編集

Keras 2.3.1では、 https://github.com/keras-team/keras/blob/2.3.1/keras/layers/recurrent.py の23行目の「from ..legacy.layers import Recurrent」があるので、「from keras.layers.recurrent import Recurrent」ができますけど、 https://github.com/keras-team/keras/blob/2.3.1/keras/legacy/layers.py の314行目に「Do not use in a model -- it's not a valid layer!」と書いてあります Keras 2.4.0以降では、「from ..legacy.layers import Recurrent」が無くなってます 「legacy」ですから、切り捨てられちゃったのでしょうね https://github.com/keras-team/keras/blob/2.4.0/keras/layers/recurrent.py https://github.com/keras-team/keras/blob/v2.6.0/keras/layers/recurrent.py
jbpb0

2021/08/12 23:58

> TF1.*での動作は確認しています。 のときは、Kerasが2.3.1かそれよりも古いバージョンを使っていたので、「from keras.layers.recurrent import Recurrent」ができた Keras 2.4.0以降では、それは削除されてできなくなった tensorflow.kerasには、もともとそれは入ってないのでできない https://github.com/tensorflow/tensorflow/blob/v1.9.0/tensorflow/python/keras/layers/recurrent.py ということのようですね
退会済みユーザー

退会済みユーザー

2021/08/13 07:42

なるほど、ありがとうございます。 「from keras.layers.recurrent import Recurrent」の代わりになるものを探すという手段がベストな判断ですかね? 個人的には「from tensorflow.keras.layers import Attention」をどうにか使用できないかなとは思っているのですが、、、
jbpb0

2021/08/15 09:48

> 「from keras.layers.recurrent import Recurrent」の代わりになるものを探すという手段がベストな判断ですかね? TF 1.* 用コードの 「from keras.layers.recurrent import Recurrent」 以降の「Recurrent」を使っているところを、現状で利用可能なもので置き換える、ということになりますね
退会済みユーザー

退会済みユーザー

2021/08/16 06:02

分かりました。色々とありがとうございました!
guest

回答1

0

ベストアンサー

tensorflow 1.*のときは、Kerasが2.3.1かそれよりも古いバージョンを使っていたので、

python

1from keras.layers.recurrent import Recurrent

ができた

Keras 2.4.0以降では、それは削除されてできなくなった

tensorflow.kerasには、もともとそれは入ってないのでできない

ということのようです

投稿2021/08/15 09:43

jbpb0

総合スコア7653

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問