1.数据准备
使用数据为imdb数据集,每一条记录为用户对电影的评论(feature),以及评论是正/负向的(label)
数据集可以直接从tensorflow.keras.datasets中导入
import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt
imdb=keras.datasets.imdb
#取10000个最常出现的词
(x_train,y_train),(x_test,y_test)=imdb.load_data(num_words=10000)
num_words=10000,即每条评论只保留频率最高的10000的单词,避免内存爆炸
数据集格式如下:
其中对每条评论已经分词,并取各个单词对应的id,得到每条评论的单词集合
label即为0/1
在输入DNN模型前,首先要对数据进行预处理。将每条评论的单词集合转换为one-hot向量
#对列表进行one-hot编码
import numpy as np
def vectorize_sequences(sequences,dimension=10000):
results=np.zeros((len(sequences),dimension))
for i ,sequences in enumerate(sequences):
results[i,sequences]=1.
return results
x_train=vectorize_sequences(x_train)
x_test=vectorize_sequences(x_test)
y_train=np.asanyarray(y_train).astype('float32')
y_test=np.asanyarray(y_test).astype('float32')
2.建立模型
一个简单的DNN模型:
model=keras.models.Sequential()
model.add(keras.layers.Dense(16,activation='relu',input_shape=(10000,)))
model.add(keras.layers.Dense(16,activation='relu'))
model.add(keras.layers.Dense(1,activation='sigmoid'))
编译模型:
指定损失函数,优化器,评估指标等
# model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])
model.compile(optimizer=keras.optimizers.RMSprop(lr=0.001),loss='binary_crossentropy',metrics=['accuracy'])
将训练数据train_x划分为训练集和验证集:
(这里只是简单取前1000条训练数据作为验证集,实际中一般随机抽取)
x_val=x_train[:10000]y_val=y_train[:10000]x_train_t=x_train[10000:]y_train_t=y_train[10000:]
3.训练模型
4.查看训练集,验证集误差
这里采用可视化方式,模型结果保存在history.history中
5. 模型预测
pre=model.predict(x_test)