AttributeError: ‘Model’ object has no attribute ‘_get_distribution_strategy'[Keras][Tensorboard]
先に解決方法
importの仕方を見直す。
以降だらだらと経緯を書く
kerasでtensorboardを使おうとしたら、AttributeError: 'Model’ object has no attribute '_get_distribution_strategy’ のエラーがでた。
しかし、検索を重ねても解決方法がほとんどでてこない。
色々なサイトを見ると、importの仕方で挙動が変わるということが書いてあったので、試してみた。結果、ヒット。
エラーが出るimportの仕方
import os import numpy as np from datetime import datetime import tensorflow as tf from keras.layers import Input, Dense from keras.models import Model from keras.optimizers import SGD from keras.callbacks import TensorBoard num_features = 100 train_x = np.random.rand(40, num_features) train_y = np.random.randint(2, size=40) # The input layer input_layer = Input(shape=(num_features,), name="Input") output = Dense(10, activation='sigmoid', name="Hidden_1")(input_layer) output = Dense(1, activation='sigmoid', name="Output")(output) model = Model(inputs=input_layer, outputs=output) sgd = SGD(lr=0.01, decay=1e-4, momentum=0.9, nesterov=True) model.compile(loss='binary_crossentropy', optimizer=sgd, metrics=['accuracy']) log_dir="logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S") tensorboard_callback = TensorBoard(log_dir) my_callbacks = [tensorboard_callback] model.fit(x=train_x, y=train_y, validation_split=.2, epochs=5, callbacks=my_callbacks)
正常に動作するimportの仕方
import os import numpy as np from datetime import datetime # import tensorflow as tf # from keras.layers import Input, Dense # from keras.models import Model # from keras.optimizers import SGD # from keras.callbacks import TensorBoard import tensorflow num_features = 100 train_x = np.random.rand(40, num_features) train_y = np.random.randint(2, size=40) # The input layer input_layer = tensorflow.keras.layers.Input(shape=(num_features,), name="Input") output = tensorflow.keras.layers.Dense(10, activation='sigmoid', name="Hidden_1")(input_layer) output = tensorflow.keras.layers.Dense(1, activation='sigmoid', name="Output")(output) model = tensorflow.keras.models.Model(inputs=input_layer, outputs=output) sgd = tensorflow.optimizers.SGD(lr=0.01, decay=1e-4, momentum=0.9, nesterov=True) model.compile(loss='binary_crossentropy', optimizer=sgd, metrics=['accuracy']) log_dir="logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S") tensorboard_callback = tensorflow.keras.callbacks.TensorBoard(log_dir) my_callbacks = [tensorboard_callback] model.fit(x=train_x, y=train_y, validation_split=.2, epochs=5, callbacks=my_callbacks)
結局、kerasからではなく、tensorflowからimportするとうまくいったという話。
ディスカッション
コメント一覧
まだ、コメントがありません