600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 深度学习-Tensorflow2.2-RNN循环神经网络{11}-评论分类-25

深度学习-Tensorflow2.2-RNN循环神经网络{11}-评论分类-25

时间:2021-09-13 14:14:47

相关推荐

深度学习-Tensorflow2.2-RNN循环神经网络{11}-评论分类-25

什么是RNN?

代码

import tensorflow as tfimport matplotlib.pyplot as plt%matplotlib inlineimport numpy as npimport pandas as pdimport osimport re

# 显存自适应分配gpus = tf.config.experimental.list_physical_devices(device_type='GPU')for gpu in gpus:tf.config.experimental.set_memory_growth(gpu,True)

gpu_ok = tf.test.is_gpu_available()print("tf version:", tf.__version__)print("use GPU", gpu_ok) # 判断是否使用gpu进行训练

读取数据

data = pd.read_csv ("F:/py/ziliao/数据集/Tweets.csv")

data = data[["airline_sentiment","text"]] # 取出需要的列

data_p = data[data.airline_sentiment=="positive"] # 取出需要的评论

data_n = data[data.airline_sentiment=="negative"]

data_n = data_n.iloc[:len(data_p)] # 我们从差评里取出好评这么多数据让数据一致

数据预处理

# 创建新的数据data = pd.concat([data_n,data_p])len(data)

# 处理label# 返回布尔值,把布尔值astype成int类型 赋值给review列data["review"] = (data.airline_sentiment=="positive").astype("int")

处理评论文本

token = pile("[A-Za-z]+|[!?,.()]")# 编写一个正则取出A-Z a-z !?,.()

def reg_text(text):new_text = token.findall(text) # 提取字符new_text = [word.lower()for word in new_text] # 变成小写return new_text

data["text"] = data.text.apply(reg_text) # 字符处理后重新赋值给text

# 提取出文本中的唯一单词word_set = set()for text in data.text:for word in text:word_set.add(word)

# 构造一个 英文单词:索引word_list = list(word_set) # 转换成列表

# 转换成 英文单词:数字索引 把所有数字+1 表示不从0开始数数word_index = dict((word,word_list.index(word)+1) for word in word_list)

# 对数据集进行转换 如果未匹配到 0作为填充data_ok = data.text.apply(lambda x:[word_index.get(word,0)for word in x])

max(len(x)for x in data_ok),min(len(x)for x in data_ok) # 查看评论长度

maxlen = max(len(x)for x in data_ok)

# 对所有评论安装最大长度进行填充 填充为0data_ok = tf.keras.preprocessing.sequence.pad_sequences(data_ok.values,maxlen=maxlen)

搭建循环神经网络

model = tf.keras.Sequential() # 顺序模型

# 最大单词格式 , 密集向量长度 , 评论的长度model.add(tf.keras.layers.Embedding(max_word,50,input_length=maxlen))

model.add(tf.keras.layers.LSTM(64)) # 添加LSTM层 隐藏单元 64个 #超参数

model.add(tf.keras.layers.Dense(1,activation="sigmoid")) # 二分类激活函数sigmoid

# 编译pile(optimizer="adam",loss="binary_crossentropy",metrics=["acc"])

# 训练model.fit(data_ok,label, # 训练数据及labelepochs=10, # 训练步数batch_size=128, # 每次训练128个数据validation_split=0.2 # 从训练集中分割出20%作为测试集)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。