加载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降维