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 osimport numpy as npfrom datetime import datetimeimport tensorflow as tffrom keras.layers import Input, Densefrom keras.models import Model
from keras.optimizers import SGDfrom keras.callbacks import TensorBoard
num_features = 100train_x = np.random.rand(40, num_features)train_y = np.random.randint(2, size=40)
# The input layerinput_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 =
model.fit(x=train_x, y=train_y, validation_split=.2, epochs=5, callbacks=my_callbacks)正常に動作するimportの仕方
import osimport numpy as npfrom 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 = 100train_x = np.random.rand(40, num_features)train_y = np.random.randint(2, size=40)
# The input layerinput_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 =
model.fit(x=train_x, y=train_y, validation_split=.2, epochs=5, callbacks=my_callbacks)結局、kerasからではなく、tensorflowからimportするとうまくいったという話。