質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.02%

  • TensorFlow

    486questions

  • Keras

    116questions

KerasでTensorBoardのEmbeddingVisualizationが表示できません

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 358

cloudspider

score 58

KerasとTensorBoardを使ってMNIST解析をしているのですが、TensorBoardのEmbedding Visualizationを上手く表示できない状態です。

いくつか質問があります。

1.まずKerasにはEmbedding layerというのがありますが、これは具体的にどんな役割を果たすレイヤーなのでしょうか。
これがそもそもわかっていません。オライリーの「ゼロから作るDeep Learning」を使ってNNの勉強を進めていたのですが、そこにも出てこず、「Embedding layer」で検索してもKeras関連のものしか出てこず、Kerasのオリジナルなのでしょうか、その役割がわかりません。

2.次に、KerasのEmbeddingレイヤーのパラメータの設定の仕方が、公式ドキュメントを読んでもいまいち理解できず、Embedding層を挿入するとエラーが出続けるので、上手く組み込めません。
affineレイヤーと同じように、入力数(MNISTなら784)と、その層の出力数(次の隠れ層の入力数)という感じで、設定するのとは違うのでしょうか。
それかそもそもEmbeddingレイヤー単体で使うものではないのでしょうか。

3.最後に、一番したいと思っていたことはこれなのですが、TensorBoardでMNIST画像の分類のEmbedding VisualizationをKerasを用いて実装したいのですが、上手く行きません。

調べてみるとこのサイトにKerasでEmbeddingVisualizationを実装するコードが載っているのでできないわけではないと思うのですが、上手く組み込めません。
そもそもTensorBoardとKerasのEmbedding layerは別物なのでしょうか。

現在はこのような感じです。
KerasへのTensorBoard実行のためのコードの実装と、多分間違えてますが、imageの表示もできています。
ですがこのページの下の方にあるようなEmbeddingVisualizationができない状態です。

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
from keras.models import Sequential
from keras.layers import Dense,Activation
from keras.layers.wrappers import Bidirectional
from keras.layers.recurrent import LSTM
from keras.optimizers import Adam
from keras.callbacks import EarlyStopping

# tensorboard
import keras.callbacks
import keras.backend.tensorflow_backend as KTF
import tensorflow as tf

# lossの履歴をプロット
def plot_history(history):
    plt.plot(history.history['loss'],label="MNIST LSTM",)
    plt.title('LSTM')
    plt.xlabel('epoch')
    plt.ylabel('loss')
    plt.legend(loc='lower right')
    plt.show()

log_filepath = './log' # tensorboard
###############################
#         データの生成          #
###############################
np.random.seed(0)
mnist = datasets.fetch_mldata('MNIST original', data_home='.')

n = len(mnist.data)
N = 10000
indices = np.random.permutation(range(n))[:N]  # ランダムにN枚を選択

X = mnist.data[indices]
y = mnist.target[indices]
Y = np.eye(10)[y.astype(int)]  # 1-of-K 表現に変換

# 正規化
X = X / 255.0
X = X - X.mean(axis=1).reshape(len(X), 1)
X = X.reshape(len(X), 28, 28)

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, train_size=0.8)

###############################
#         モデルの設定          #
###############################
n_in = 28
n_time = 28
n_hidden = 128
n_out = 10

def weight_variable(shape, name=None):
    return np.random.normal(scale=.01, size=shape)

early_stopping = EarlyStopping(monitor='val_loss', patience=10, verbose=1)

old_session = KTF.get_session() # tensorboard

with tf.Graph().as_default():
    # tensorboard
    session = tf.Session('')
    KTF.set_session(session)
    KTF.set_learning_phase(1)

    # image処理
    # 読み込むべきはX_trainではない気がする
    X_train_img = tf.reshape(X_train, [-1, 28, 28, 1])
    X_train_img = tf.cast(X_train_img, tf.float32)
    tf.summary.image('train',X_train_img , 10)

    model = Sequential()
    model.add(Bidirectional(LSTM(n_hidden),input_shape=(n_time, n_in)))
    model.add(Dense(n_out, kernel_initializer=weight_variable))
    model.add(Activation('softmax'))
    model.summary()

    # AdaDelta良い説!!!!!!!!!!!!1
    optimizer = Adam(lr=0.001, beta_1=0.9, beta_2=0.999)
    model.compile(optimizer=optimizer,
                  loss='mean_squared_error',
                  metrics=['accuracy'])

    tb_cb = keras.callbacks.TensorBoard(
                                log_dir=log_filepath,
                                histogram_freq=1,
                                embeddings_freq=100)
                                 # tensorboard

    ###############################
    #         モデルの学習          #
    ###############################
    # epochs = 60
    epochs = 3
    batch_size = 200

    his = model.fit(X_train, Y_train,
                    batch_size=batch_size,
                    epochs=epochs,
                    validation_data=(X_test,Y_test),
                    callbacks=[early_stopping,tb_cb]) # tensorboard

    ###############################
    #         モデルの予測          #
    ###############################
    score = model.evaluate(X_test, Y_test, verbose=0)
    print('loss:{}'.format(score[0]))
    print('acc:{}'.format(score[1]))
    plot_history(his)

# tensorboard
KTF.set_session(old_session)

質問が多くて恐縮です。
一部でもご存じの方がいらっしゃれば教えていただけないでしょうか。
よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 91.02%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • TensorFlow

    486questions

  • Keras

    116questions