Keras使用tensorboard訓練過程可視化踩過的坑

《Python深度學習》看到第七章,由于時間跨度較大,前面內(nèi)容有點記不太清楚了,好在演示代碼都挨著運行成功了一遍,也參照教程使用CNN寫了個簡單的驗證碼識別模型出來。
在使用tensorboard做可視化的過程中,遇到一些坑,在這里記錄下解決問題的心路歷程,后面換電腦的話也有個參考:

問題一:No module named 'google.protobuf.pyext'

解決方式: 管理員模式打開cmd :
pip install protobuf -i https://pypi.tuna.tsinghua.edu.cn/simple
當然pip源可以選個自己喜歡的。這個問題完全沒有必要寫的啊 但事實上確實困擾了我一兩個小時,之前總覺得是google包出了問題,怎么裝都沒法解決。尷尬,先掛到這里起警示作用吧!

問題二:Allocation of 6400000000 exceeds 10% of system memory.

啰嗦:之前單獨使用一維卷積訓練imdb的時候運行還比較正常,怎么添加了callback后就內(nèi)存不足了呢。看來使用tensorboard回調(diào)是一件占用內(nèi)存挺高的操作。回去對比了一下,演示代碼的max_features也比之前的大了一倍,難怪我的小內(nèi)存筆記本有點吃不消了。
解決方式:max_features = 500, 減少特征數(shù)量,從而減少網(wǎng)絡(luò)的大小。
對,這里還是把書中代碼修改的地方標注一下吧:

import keras
from keras import layers
from keras.datasets import imdb
from keras.preprocessing import sequence
max_features = 500 # 原文為2000
max_len = 500
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)
x_train = sequence.pad_sequences(x_train, maxlen=max_len)
x_test = sequence.pad_sequences(x_test, maxlen=max_len)
model = keras.models.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', loss='binary_crossentropy', metrics=['acc'])
callbacks = [keras.callbacks.TensorBoard(
                      log_dir='my_log_dir',
                      histogram_freq=1,
                      embeddings_freq=1,
                      embeddings_data = x_train[:100].astype("float32")
)]
history = model.fit(x_train, y_train,  epochs=20, batch_size=128, validation_split=0.2, callbacks=callbacks)  

問題三:ValueError: To visualize embeddings, embeddings_data must be provided.

啰唆:字面意思應(yīng)該是回掉的TensorBoard類中沒有指定
embeddings_data的值,按理說這么經(jīng)典的書應(yīng)該不會出這種問題,可能是版本的差異吧。
解決方式:添加embeddings_data=x_train試試... 仍然會報錯,但是這次的錯誤比較明顯,embeddings_data需要是float類型的,而我們的x_train還是int32。使用astype轉(zhuǎn)換成float類型再次填寫參數(shù)。
見證奇跡的時刻終于到了~瀏覽器可以正常訪問 tensorboard,使用PCA計算出Embedding 的結(jié)果,結(jié)果大概就是下面的樣子(還是有些酷炫的嘛)。

1.png

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容