Kerasでエラーを取るのにかなり時間をとられたので,備忘録的なものとして残しておきます.
このエラーで検索してもヒットするサイトがなく,よくわからない翻訳サイトに引っかかってしまって不愉快な思いをする人が少なくなるようにこれを書いています.
あくまで自分が試した結果エラーが出なくなった過程を書いています.
したがって,自分の環境ではこれで解決したに過ぎない点に関してご了承をお願いします.
もし参考になるようでしたら幸いです.
最初に結論
すべてのレイヤーを追加する段階でUniqueな名前を手動でつける.
たとえば,
from keras.models import Sequential
from keras.layers import Dropoutmodel = 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.9tensorflow = 1.14.0keras = 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で解消されると良いですが.
それとも何か他に原因があるのでしょうか...
0 件のコメント:
コメントを投稿