如何快速上手tensorflow
其中的内容多来自GitHub上的内容https://github.com/apachecn/AiLearning/blob/master/docs/ml/2.k-%E8%BF%91%E9%82%BB%E7%AE%97%E6%B3%95.md,
感谢https://github.com/apachecn/AiLearning该团队的入门内容
首先是数据集的获取,我是使用的keras下载的数据集
imdb = keras.datasets.imdb#使用imdb数据集
#接着是分类,分为train和test两类
(train_data,train_labels),(test_data,test_labels)=imdb.load_data(num_words=10000)
#print(train_data[0])查看第一个评论的文本内容,文本被转化成整数数值,每个整数对应一个字典中的一个字
#print(train_labels)查看电影的评价,0,1对应着好,坏
#接下来做一个整数与单词的转换操作去看
# 整数与单词的转换
# 一个映射单词到整数索引的词典
word_index = imdb.get_word_index()
# 保留第一个索引
word_index = {k: (v + 3) for k, v in word_index.items()}
word_index["<PAD>"] = 0
word_index["<START>"] = 1
word_index["<UNK>"] = 2
word_index["<UNUSED>"] = 3
everse_word_index = dict([(value, key) for (key, value) in word_index.items()])
def decode_review(text):
return ''.join([reverse_word_index.get(i, '?') for i in text])
#这里可以用print来选出一个的评论来查看
#其上 上面这几步我有些迷糊,有大佬能解释一下的评论区见
更新一下’[PAD]’, ‘[UNK]’, ‘[CLS]’, ‘[SEP]’,它们分别代表填充字符、低频词、开始标记、结束标记,类似的对应了上面的word_index[""]里的一些内容,可以作为参考
接下来我们将要进行数据的准备
#首先是将评论数据进行一个统一长度的预处理,完善tensorflow的数据要求
#padding的内容决定了补充的位置,value决定了补充的内容
train_data = keras.preprocessing.sequence.pad_sequences(train_data, value=word_index["<PAD>"],padding='post',maxlen=256)
test_data = keras.preprocessing.sequence.pad_sequences(train_data, value=word_index["<PAD>"], padding='post',maxlen=256)
#以下三个内容用来观察数据预处理的内容
#print(len(train_data[0]), len(train_data[1]))
#print(train_data[0])
#print(train_data[1])
接下来是模型的构建和模型的训练与评估
vocab_size = 10000
model = keras.Sequential()
# 第一层嵌入(Embedding)层,该层采用整数编码的词汇表,
# 并查找每个词索引的嵌入向量(embedding vector)
# 这些向量是通过模型训练学习到的。向量向输出数组增加了一个维度。
model.add(keras.layers.Embedding(vocab_size, 16))
# 通过GlobalAveragePooling1D将通过对序列维度求平均值来
# 为每个样本返回一个定长的输出向量。这允许模型以尽可能简单的方式处理变长输入
model.add(keras.layers.GlobalAveragePooling1D())
# 该定长输出向量通过一个有16个隐层单元的全连接层传输
model.add(keras.layers.Dense(16, activation='relu'))
# 最后一层与单个输出节点密切连接,使用sigmoid激活函数,使其函数值介于0,1之间的浮点数,表示概率或者置信度
model.add(keras.layers.Dense(1, activation='sigmoid'))
model.summary()
# 配置模型使用优化器和损失函数
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# 创建验证集
x_val = train_data[:10000]
partial_x_train = train_data[10000:]
y_val = train_labels[:10000]
partial_y_train = train_labels[10000:]
# 训练模型
history = model.fit(partial_x_train, partial_y_train, epochs=40, batch_size=512, validation_data=(x_val, y_val),
verbose=1)
# 评估模型
results = model.evaluate(test_data, test_labels, verbose=2)
print(results)
# 创建准确率和损失率随时间变化的图表
history_dict = history.history
print(history_dict)
history_dict.keys()
import matplotlib.pyplot as plt
acc = history_dict['accuracy']
val_acc = history_dict['val_accuracy']
loss = history_dict['loss']
val_loss = history_dict['val_loss']
epochs = range(1,len(acc)+1)
# "bo"代表蓝点
plt.plot(epochs,loss,'bo',label='Training loss')
# "b"代表蓝色实线
plt.plot(epochs, val_loss, 'b',label='Validation loss')
plt.title('Training and validation loss')
plt.xlabel('epochs')
plt.ylabel('loss')
plt.legend()
plt.show()
plt.clf()
# "bo"代表蓝点
plt.plot(epochs,acc,'bo',label='Training acc')
# "b"代表蓝色实线
plt.plot(epochs, val_acc, 'b',label='Validation acc')
plt.title('Training and validation loss')
plt.xlabel('epochs')
plt.ylabel('loss')
plt.legend()
plt.show()
plot的简单使用参考我的另一篇博客