加载imdb数据以及TensorBoard的使用方法

加载imdb数据

修改imdb.py

这里我把imdb数据下载下来,放在keras>datasets文件夹下面,并且需要修改一下imdb.py文件

# path = get_file(path,
# origin=https://s3.amazonaws.com/text-datasets/imdb.npz,
# file_hash=599dadb1135973df5b59232a0e9a887c)
    path = rD:pythonTextvenvLibsite-packageskerasdatasetsimdb.npz

这里把原来使用的path路径注释掉,使用我们用来放置imdb.npz的路径

加载imdb数据
from keras.datasets import imdb
from keras import preprocessing

max_feature = 10000
max_len = 100

(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=max_feature)
train_data = preprocessing.sequence.pad_sequences(train_data, maxlen=max_len, truncating=post)

(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=max_feature) 代码的意思是加载最常用的max_feature=10000个词,这10000词在接下来中会用于Embedding层,这个层的作用是把10000个词嵌入到高维度中

train_data = preprocessing.sequence.pad_sequences(train_data, maxlen=max_len, truncating=post) 代码的意思是会对train_data的数据截断,只会保留前max_len=100个词,注意 truncating=post的含义是截断的位置在后面,即从前开始选取100个词,truncating=pre的含义是截断位置在前面,即从最后开始选取100个词,感觉这个地方要反着来理解。

模型搭建

import tensorflow as tf

log_dir = os.path.join("datalogDir")
if not os.path.exists(log_dir):
    os.mkdir(log_dir)

callbacks = [
    tf.keras.callbacks.TensorBoard(
        log_dir=log_dir,
        histogram_freq=1,
        embeddings_freq=1,
    )
]
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Embedding(10000, 8, input_length=max_len))
model.add(tf.keras.layers.GRU(32, dropout=0.2, recurrent_dropout=0.2))
model.add(tf.keras.layers.Dense(1, activation=sigmoid))
model.compile(optimizer=rmsprop,
              loss=binary_crossentropy,
              metrics=[acc])
model.summary()
(一)注意事项

log_dir = os.path.join("datalogDir") 使用TensorBoard的时候,win10平台下一定要用上面代码把路径包起来

这个地方"datalogDir",最好可能也许大概这个文件用mkdir创建一下,我在操作的时候自己创建了这个文件,然后就就会报错

tf.keras 所有的keras前面都要用tf,这是应为要是不用tf.keras的话会存在keras和tf.keras混用的情况,会报错,这里我觉得TensorBoard就是Tensorflow里面的,所以这里调用的keras也是Tensorflow里面的才行,强行理解一波哈哈哈

(二)代码说明

tf.keras.callbacks.TensorBoard( log_dir=log_dir, histogram_freq=1, embeddings_freq=1, ) histogram_freq=1的含义是激活函数直方图,从这个图中可以看出来有没有梯度消失之类的问题,embeddings_freq=1的含义是画出Embeding层

梯度消失 下面这张图片是5层神经网络的激活输出值,激活函数用的是sigmoid 从激活函数的输出值我们可以看出,sigmoid的输出是大多是是0和1,在sigmoid函数中,函数值越接近0和1也就意味这,函数在该点的导数趋近于0,所以在后面的反向求导过程中会使得反向传播没有意义

训练模型

history = model.fit(train_data,
                    train_labels,
                    batch_size=128,
                    epochs=3,
                    validation_split=0.2,
                    callbacks=callbacks)

利用TensorBoard查看结果

在命令行输入

tensorboard --logdir=datalogDir

准确率和损失函数 激活函数直方图,还不怎么会看哈哈 Embeding层,用了PCA降维

经验分享 程序员 微信小程序 职场和发展