uni-3 log

    Search by

    kerasでtensorboardの表示とmodelの保存

    環境

    • ubuntu: 17.04
    • python: 3.6
    • keras: 2.0.8
    • tensorflow: 1.3.0
    • tensorflow-tensorboard: 0.1.5

    実装

    tensorboard用callbackの指定

    model.fit()のcallbacks引数に、keras.callbacks.TensorBoard()を指定する また、histogramfreqを指定する場合はvalidationdata引数が必要になる 具体的には以下のようにする

    tb_cb = keras.callbacks.TensorBoard(log_dir=log_filepath, 
    histogram_freq=1, write_graph=True, write_images=True)
    
    model.fit(x_train, y_train,
              epochs=20, batch_size=128,
              callbacks=[tb_cb], validation_data=(x_test, y_test))

    modelファイルの保存

    model.save("ファイルパス")

    とすればよい

    ソースコード

    学習モデルは https://keras.io/ja/getting-started/sequential-model-guide/#sequentialkeras の”多層パーセプトロン (MLP) を用いた多値分類:“を用いた

    main.py
    # config utf-8
    import keras
    from keras.models import Sequential
    from keras.layers import Dense, Activation, Dropout
    from keras.optimizers import SGD
    
    import numpy as np
    
    classes = 10
    def create_dummy():
        # 20種類からなる1000個のデータ
        x_train = np.random.random((1000, 20))
        # 1000個のデータにランダムでラベル付
        # categorical 4 = [0,0,0,1,0,0,0,0,0,0] みたいにする
        y_train = keras.utils.to_categorical(np.random.randint(classes, size=(1000, 1)), num_classes=classes)
        x_test = np.random.random((100, 20))
        y_test = keras.utils.to_categorical(np.random.randint(classes, size=(100, 1)), num_classes=classes)
        return x_train, y_train, x_test, y_test
    
    def add_model():
        model = Sequential()
    
        model.add(Dense(units=64, activation='relu', input_dim=20))
        model.add(Dropout(0.5))
        model.add(Dense(units=64, activation='relu'))
        model.add(Dropout(0.5))
        model.add(Dense(units=classes, activation='softmax'))
    
        sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
        model.compile(loss='categorical_crossentropy',
                      optimizer=sgd,
                      metrics=['accuracy'])
        return model
    
    def main():
        print("loading data...")
        x_train, y_train, x_test, y_test = create_dummy()
    
        log_filepath = "./logs/"
        tb_cb = keras.callbacks.TensorBoard(log_dir=log_filepath, histogram_freq=1, write_graph=True, write_images=True)
    
        print("create model...")
        model = add_model()
        model.fit(x_train, y_train,
                  epochs=20, batch_size=128,
                  callbacks=[tb_cb], validation_data=(x_test, y_test))
    
        score = model.evaluate(x_test, y_test, batch_size=128)
        print('Test loss:', score[0])
        print('Test accuracy:', score[1])
    
        model.save("model.h5")
    
    if __name__ == '__main__':
        main()

    実行

    python main.py
    Using TensorFlow backend.
    loading data...
    create model...
    Train on 1000 samples, validate on 100 samples
    ...

    終了するとlogsディレクトリとモデルファイルが作成される

    ls
    logs  main.py  model.h5

    tensorboard表示

    —logdirオプションにログファイルの入ったディレクトリを指定

    tensorboard --logdir=./logs
    TensorBoard 0.1.5 at http://xxxx:6006 (Press CTRL+C to quit) 

    http://localhost:6006にアクセスすると表示される

    result

    学習データとテストデータはランダムに生成したデータなので、互いに無関係である 実際、学習してもテストデータのaccuracyは上がらない様子が確認できる

    参考

    2021, Built with Gatsby. This site uses Google Analytics.