《python深度学习》笔记---3.4-2、(a)电影评论分类:二分类问题
《python深度学习》笔记---3.4-2、(a)电影评论分类:二分类问题
一、总结
一句话总结:
输入模型的数据转化:电影评论分类-二分类问题要注意输入模型的数据转化:
把出现的单词对应的数字的位置标为1:将数据集中的每条数据采用类似one_hot编码的方式,就是把出现这个单词的位置的编号这里的数置为1
把出现的单词对应的数字的位置标为1:所以如果一句话单词对应的数字为1、5、7,那么这个10000维向量1/5/7的位置为1,其它为0
1、二分类的输出处理?
可以one_hot编码:one_hot编码就判断哪一类就好,输出层的话就是2个神经元,
也可以直接sigmoid输出:判断是否大于0.5,输出层只需要一个神经元
2、仅保留训练数据中前10 000 个最常出现的单词?
num_words=10000:(train_data, train_labels),(test_data, test_labels)= tf.keras.datasets.imdb.load_data(num_words=10000)
参数 num_words=10000 的意思是仅保留训练数据中前10 000 个最常出现的单词。低频单 词将被舍弃。
3、找2D张量中的最大值?
将第二维度中的最大值找出来组成list:max([max(sequence) for sequence in train_data])
4、设置numpy的n维数组的ndtype?
astype方法:train_y=np.array(train_y).astype('float32')
train_y=np.array(train_y).astype('float32') test_y=np.array(test_y).astype('float32')
二、(a)电影评论分类:二分类问题
博客对应课程的视频位置:
lable由int变为float,感觉没有什么影响
In [1]:
import pandas as pd
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
步骤
1、读取数据集
2、拆分数据集(拆分成训练数据集和测试数据集)
3、构建模型
4、训练模型
5、检验模型
需求
1、读取数据集
In [2]:
(train_x, train_y),(test_x, test_y)=tf.keras.datasets.imdb.load_data(num_words=10000)
In [3]:
print(type(train_x))
In [4]:
print(train_x.shape)
print(train_y.shape)
print(test_x.shape)
print(test_y.shape)
In [6]:
print(train_x[0:2])
print(train_y[0:2])
2、格式化数据集
将数据集中的每条数据采用类似one_hot编码的方式,
感觉就是把出现这个单词的位置的编号这里的数置为1
没出现就置为0
所以如果一句话单词对应的数字为1、5、7,那么这个10000维向量1/5/7的位置为1,其它为0
处理x数据
In [7]:
print(type(train_x))
In [8]:
print(len(train_x))
In [9]:
def format_data(sequences,dimension=10000):
ans=np.zeros((len(sequences),dimension))
for i,sequence in enumerate(sequences):
# 批量赋值
ans[i,sequence]=1.
pass
return ans
In [10]:
train_x=format_data(train_x)
test_x=format_data(test_x)
print(train_x)
print(train_x.shape)
print(test_x.shape)
In [11]:
print(train_x[0])
In [12]:
# print([ val for i,val in enumerate(train_x[0])])
In [13]:
ans1=[]
for i,val in enumerate(train_x[0]):
if(int(val)==1):
ans1.append(i)
print(ans1)
In [14]:
ans1=[]
for i,val in enumerate(train_x[1]):
if(int(val)==1):
ans1.append(i)
print(ans1)
处理y(label)数据
In [15]:
train_y=np.array(train_y).astype('float32')
test_y=np.array(test_y).astype('float32')
In [16]:
print(type(train_y))
print(type(test_y))
In [17]:
print(train_y.dtype)
In [18]:
print(train_y[0:12])
3、构建模型
In [19]:
# 构建容器
model = tf.keras.Sequential()
# 输入层
model.add(tf.keras.Input(shape=(10000,)))
# 中间层
model.add(tf.keras.layers.Dense(16,activation='relu'))
# 中间层
model.add(tf.keras.layers.Dense(16,activation='relu'))
# 输出层
model.add(tf.keras.layers.Dense(1,activation='sigmoid'))
# 模型的结构
model.summary()
4、训练模型
In [20]:
# 配置优化函数和损失器
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['acc'])
# 开始训练
history = model.fit(train_x,train_y,epochs=20,batch_size=512,validation_data=(test_x,test_y))
损失和准确率可视化
In [21]:
plt.plot(history.epoch,history.history.get('loss'),'b--',label='train_loss')
plt.plot(history.epoch,history.history.get('val_loss'),'r-',label='test_loss')
plt.title("loss")
plt.legend()
plt.show()
In [22]:
plt.plot(history.epoch,history.history.get('acc'),'b--',label='train_acc')
plt.plot(history.epoch,history.history.get('val_acc'),'r-',label='test_acc')
plt.title("acc")
plt.legend()
plt.show()
5、检验模型
In [23]:
print(model.predict(train_x))
print(train_y)
In [24]:
predict_test_y=model.predict(test_x)
print(predict_test_y)
print(test_y)
In [25]:
predict_test_y1=[]
for i in predict_test_y:
predict_test_y1.append(1 if i>=0.5 else 0)
pass
print([int(i) for i in test_y][0:20])
print(predict_test_y1[0:20])
In [ ]:
版权申明:欢迎转载,但请注明出处
一些博文中有一些参考内容因时间久远找不到来源了没有注明,如果侵权请联系我删除。
在校每年国奖、每年专业第一,加拿大留学,先后工作于华东师范大学和香港教育大学。
2025-04-30:宅加太忙,特此在网上找女朋友,坐标上海,非诚勿扰,vx:fan404006308
AI交流资料群:753014672