【Keras】The name "NAME" is used 2 times in the model. All layer names should be unique.のエラーの対処法

2021年1月6日水曜日

Machine Learning Materials Informatics MI ML Python Python3 機械学習

B!
Kerasでエラーを取るのにかなり時間をとられたので,備忘録的なものとして残しておきます.

このエラーで検索してもヒットするサイトがなく,よくわからない翻訳サイトに引っかかってしまって不愉快な思いをする人が少なくなるようにこれを書いています.

あくまで自分が試した結果エラーが出なくなった過程を書いています.
したがって,自分の環境ではこれで解決したに過ぎない点に関してご了承をお願いします.

もし参考になるようでしたら幸いです.

最初に結論

すべてのレイヤーを追加する段階でUniqueな名前を手動でつける.

たとえば,
from keras.models import Sequential from keras.layers import Dropout
model = Sequential()
model.add(Dropout(0.1, input_shape = (n,), name = 'Dropout_1')
といった具合です.

大体のレイヤーはこういったやり方で名前が付けられたはずです.(引数にname = 'NAME'とすることで)

環境

PC

ProductName: Mac OS X
ProductVersion: 10.15.7

Python

Python = 3.7.9
tensorflow = 1.14.0
keras = 2.3.1

「The name "NAME" is used 2 times in the model. All layer names should be unique.」

このエラーは「layerの名前被っとるがな!」って怒ってるので,最初はモデルが消えていないんだと思い,__del__メソッドを定義して律儀にdel modelして解消しようとしていました.
これはこのエラーが起こったとき自分はoptunaで何度も何度もモデルを学習・予測・学習...としていたからです.

ですが,それでも解消されませんでした.

そこで全てのlayerの名前を自分で重複のないように指定しました.
その結果エラー解消となりました.

自動で割り振られるはずの名前がなぜか重複するように指定されてしまうようです.

このエラーの解消方法としてkeras.backend.clear_sessionメソッドを使用する,など紹介されていましたが,自分の環境では全く意味がありませんでした.(そもそも日本語でそれらに言及している記事がほとんどみつからなかったですが.)

なぜ名前が重複してしまうのか,わかりません.エラーが起きるときにレイヤーを出力してみたのですが,空っぽでした.それにもかかわらずレイヤーの名前が重複していると怒られたので本当によくわかりません.

まとめ

面倒ですが,自分で名前をつけましょう.

バグなのかなんなのかすらよくわかっていませんし,Versionによる違い等があるかもしれません.Updateで解消されると良いですが.

それとも何か他に原因があるのでしょうか...

自己紹介

自分の写真
国立大学の大学院で応用化学を専攻している学生です.

このブログを検索

人気の投稿

注目の投稿

PythonからIgor Proにデータを渡す方法【IgorWriter】

こんにちは. 現在自分が所属している研究室ではIgor Proを使用しているため,そちらでデータを渡して欲しいと言われることが多々あります. これをどうにかできないかと考え,調べていたところ便...

QooQ