美文网首页Computer Science
Keras使用tensorboard训练过程可视化踩过的坑

Keras使用tensorboard训练过程可视化踩过的坑

作者: mrwoody | 来源:发表于2019-03-05 23:53 被阅读0次

    《Python深度学习》看到第七章,由于时间跨度较大,前面内容有点记不太清楚了,好在演示代码都挨着运行成功了一遍,也参照教程使用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后就内存不足了呢。看来使用tensorboard回调是一件占用内存挺高的操作。回去对比了一下,演示代码的max_features也比之前的大了一倍,难怪我的小内存笔记本有点吃不消了。
    解决方式:max_features = 500, 减少特征数量,从而减少网络的大小。
    对,这里还是把书中代码修改的地方标注一下吧:

    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.

    啰唆:字面意思应该是回掉的TensorBoard类中没有指定
    embeddings_data的值,按理说这么经典的书应该不会出这种问题,可能是版本的差异吧。
    解决方式:添加embeddings_data=x_train试试... 仍然会报错,但是这次的错误比较明显,embeddings_data需要是float类型的,而我们的x_train还是int32。使用astype转换成float类型再次填写参数。
    见证奇迹的时刻终于到了~浏览器可以正常访问 tensorboard,使用PCA计算出Embedding 的结果,结果大概就是下面的样子(还是有些酷炫的嘛)。

    1.png

    相关文章

      网友评论

        本文标题:Keras使用tensorboard训练过程可视化踩过的坑

        本文链接:https://www.haomeiwen.com/subject/ojjnuqtx.html