なんのこっちゃって言われるかもですが。
結構よく使うし、よくググるので(>_<) メモしておきます。
import struct print(struct.unpack('f',b'\xdc\x8a\xc39')) #(0.00037296756636351347,)と出力されます
私がよく使うシチュエーションとしては、バイト列の中身を見たいな~とか、ログ取りたいな~って時に使います。
なんのこっちゃって言われるかもですが。
結構よく使うし、よくググるので(>_<) メモしておきます。
import struct print(struct.unpack('f',b'\xdc\x8a\xc39')) #(0.00037296756636351347,)と出力されます
私がよく使うシチュエーションとしては、バイト列の中身を見たいな~とか、ログ取りたいな~って時に使います。
Kerasでディープラーニングの開発を進めていますが、よく
model = Sequential() model.add(Dense(512, activation='relu', input_shape=(784,))) model.add(Dropout(0.2)) model.add(Dense(512, activation='relu')) model.add(Dropout(0.2)) model.add(Dense(10, activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer=RMSprop(), metrics=['accuracy'])
ってやってました。
しかし、ある時
metrics=['accuracy']
ってなんだ??という疑問にブチ当たりました。(´・ω・)
metrics=['acc']
も同様です。
Kerasの本家サイトによると
accuracyって名前のmetricsないんですよね (;^ω^)
幸いなことに、下記のStack Overflowさんに答えがありましたー!
https://stackoverflow.com/questions/41531695/how-does-keras-define-accuracy-and-loss
デフォルトはcategorical_accuracyだそうです。
下記のKerasのソースコードを見ると、損失関数のタイプとか、出力のシェイプっぽいのを見て、binary_accuracy にしてくれることもあるようです。
しかし!はっきりしていた方がいいですから、自分で指定しておいた方が私は好きですね~。
ちなみに、勉強している元ネタ本はこちら。
無駄にややこしい部分があるので、オススメ本ではありませんw
Tensorflow で色々と試行錯誤しています。
以前、下記の記事でTensorBoardという、TensorFlowについている、計測ツールについて紹介しました。
で、そのTensorBoardで下記のエラーが出ちゃいました。
tensor board found more than one metagraph
うーん。ググっても、TensorFlowの1.4では治っているよ~ という下記の記事などや、結構複雑なStack Overflowさんの記事などが出てきてしまいます(;´・ω・)。
https://github.com/GoogleCloudPlatform/cloudml-samples/issues/73
はたと思いついたのが、TensorBoardのためのログって、下記のようなファイルで出力されるじゃないですか。
events.out.tfevents.153294*****.3ec855******
それで、TensofBoardを動作させるときは、
tensorboard --logdir=C\hogehoge
みたいにディレクトリを指定しますよね。
C\hogehoge 内にある、TensofBoardのログファイルで、同じタイムスタンプのものが複数あったので、一つを残して消してみたら、普通にTensofBoardさんが動作しました!!
タイムスタンプでログファイル見てるのね。
タイムスタンプが同じものがあると、タイトルのエラーが出るようです。
私の場合は、別の機械学習用のサーバーでAIのコード動作させてて、TensofBoardのログだけ、自分のローカルPCで見ようと思って、ダウンロードしたので、同じタイムスタンプのログがいっぱいあった、ということです。
昨日の
の続きです。
TensorBoardにグラフ機能というのがあります。
上のメニューで、GRAPHSというのをクリックします。
わけのわからない図が出てきます。
図のところだけ拡大すると、こんな風。
TensorBoardの公式サイトに、チュートリアルの動画がありました。なかなかよい動画です。
余談ですが、いつも開発者の動画とかあると、見ちゃいますね。
結局、とあるプログラムがあったとして、その開発者以上にそのプログラムのことをわかっている人間はいないと思います。
で、この動画の中にもとりあえず、名前をつけてみることがよい!というお話がありましたので、名前をつけてみます。
名前をつけるやり方です。(非常に単純な話で申し訳ありませんが…。)
前述の記事内のコードに、名前をつける部分を足しただけです。
import keras import tensorflow as tf from keras.datasets import imdb from keras.preprocessing import sequence max_features = 2000 # number of words to consider as features max_len = 500 # cut texts after this number of words (among top max_features most common words) print('Loading data...') (x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features) print(len(x_train), 'train sequences') print(len(x_test), 'test sequences') print('Pad sequences (samples x time)') x_train = sequence.pad_sequences(x_train, maxlen=max_len) x_test = sequence.pad_sequences(x_test, maxlen=max_len) print('x_train shape:', x_train.shape) print('x_test shape:', x_test.shape) from keras.models import Sequential from keras import layers from keras.optimizers import RMSprop model = Sequential() model.add(layers.Embedding(max_features, 128, input_length=max_len )) model.add(layers.Conv1D(32, 7, activation='relu', name="first_layer")) model.add(layers.MaxPooling1D(5)) with tf.name_scope("second_layer"): model.add(layers.Conv1D(32, 7, activation='relu',name="hogehoge")) model.add(layers.GlobalMaxPooling1D()) model.add(layers.Dense(1)) model.summary() model.compile(optimizer=RMSprop(lr=1e-4), loss='binary_crossentropy', metrics=['acc']) callbacks = [ keras.callbacks.TensorBoard( log_dir = 'my_log_dir', histogram_freq = 1 ) ] history = model.fit(x_train, y_train, epochs=5, batch_size=128, validation_split=0.2, callbacks=callbacks)
最初の畳み込みレイヤー・Conv1Dに”first_layer”という名前をつけたのと、次の畳み込みレイヤー・Conv1Dにグルーピングの名称”second_layer”という名前をつけ、レイヤー自体には”hogehoge”という名前をつけています。
ただ単に、私がグルーピングを試してみたかっただけです。
赤丸のように、名前が変わりましたね!
マウスを当てて、右上にプラスが出てくる部分は、ダブルクリックで開けます。
より、詳しい内容がわかります。
前のレイヤーからのデータが、hogehogeレイヤーの中で、畳み込みネットワークに入り、カーネル(畳み込みレイヤーのフィルターのことです)とか、Biasが作用している感じがわかると思います。
さてさて、私は今のところ、ディープラーニングのコードを
Keras+TensorFlow
で作っています。
TensorFlowには、TensorBoardという便利ツールがあると聞き、使ってみます。
勉強している元ネタの本はこちら。
無駄にややこしい部分があるので、オススメ本ではありませんw
とりあえずの~ TensorBoardを使ってみたいだけのテストコードを書きます。
import keras from keras.datasets import imdb from keras.preprocessing import sequence max_features = 2000 # number of words to consider as features max_len = 500 # cut texts after this number of words (among top max_features most common words) print('Loading data...') (x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features) print(len(x_train), 'train sequences') print(len(x_test), 'test sequences') print('Pad sequences (samples x time)') x_train = sequence.pad_sequences(x_train, maxlen=max_len) x_test = sequence.pad_sequences(x_test, maxlen=max_len) print('x_train shape:', x_train.shape) print('x_test shape:', x_test.shape) from keras.models import Sequential from keras import layers from keras.optimizers import RMSprop model = Sequential() model.add(layers.Embedding(max_features, 128, input_length=max_len, name='embed')) model.add(layers.Conv1D(32, 7, activation='relu')) model.add(layers.MaxPooling1D(5)) model.add(layers.Conv1D(32, 7, activation='relu')) model.add(layers.GlobalMaxPooling1D()) model.add(layers.Dense(1)) model.summary() model.compile(optimizer=RMSprop(lr=1e-4), loss='binary_crossentropy', metrics=['acc']) #下記から下がTensorBoardで記録するための部分 callbacks = [ keras.callbacks.TensorBoard( log_dir = 'my_log_dir', histogram_freq = 1 ) ] history = model.fit(x_train, y_train, epochs=10, batch_size=128, validation_split=0.2, callbacks=callbacks)
映画のレビューデータである、IMDBの分析ですね。
これを実行しますと、実行したプログラムと同じディレクトリ(ここではC:\kerasStudy\my_log_dir)に
events.out.tfevents.1532589203.HOGEHOGEPC
というファイルなどができたりします。
私は、Anacondaを使っているので、Anaconda Promptを立ち上げます。
んで、
C:\Users\Hogehoge>tensorboard --logdir=C:\kerasStudy\my_log_dir
と打ち込みますと、
最後に
TensorBoard 1.8.0 at http://hogehogePC:6060
と出てきます。
後は、ブラウザから、
http://hogehogePC:6060
にアクセスすると、TensorBoardが開けます!!
感動ひとしお~
TensorBoardの使い方に関しては、改めて書きたいと思いますが、
下記の赤丸の部分にチェックが入っていないと、グラフが表示されません。