豆瓣IMDB影评数据集的GRU形式

这里边GRU是比LSTM少一个门,LSTM是有Forget gate, Imput gate, 和 Cell gate, GRU只有 Reset gate和 Forget gate 下面这个是layers形式的

import os
import tensorflow as tf
import numpy as np
from tensorflow import keras
from tensorflow.keras import layerstf.random.set_seed(22)
np.random.seed(22)
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
assert tf.__version__.startswith('2.')#每次取多少个句子
batchsz = 128
# 保留词频最高的前10000个单词其余的不会出现在train和test中
total_words = 10000
#每个句子包含的最多的词的个数
max_review_len = 80
#每个词用一个一百维的向量进行表示
embedding_len = 100
#读入数据并切分训练集与测试集
(x_train, y_train), (x_test, y_test) = keras.datasets.imdb.load_data(num_words = total_words)
#pad_sequence填充序列,这里依照每个句子为80词进行填充,多的裁减掉,缺少的用0来补
x_train = keras.preprocessing.sequence.pad_sequences(x_train, maxlen = max_review_len)
x_test = keras.preprocessing.sequence.pad_sequences(x_test, maxlen = max_review_len)
#将读入的数据转换为tensor张量形式
db_train = tf.data.Dataset.from_tensor_slices((x_train, y_train))
db_train = db_train.shuffle(1000).batch(batchsz, drop_remainder=True)
db_test = tf.data.Dataset.from_tensor_slices((x_test, y_test))
db_test = db_test.batch(batchsz, drop_remainder=True)print('x_train shape:', x_train.shape, tf.reduce_max(y_train), tf.reduce_min(y_train))
print('x_test shape', x_test.shape)#定义RNN类,分别需要两个步骤,一个是初始化
class MyRNN(keras.Model):#这里的keras.Model是指MyRNN继承的父类def __init__(self, units):#这里的units是指输出的ht的维度super(MyRNN, self).__init__()#指继承父类的初始化变量#将文本转换为词向量的表示形式即 [b, 80] -> [b, 80, 100]self.embedding = layers.Embedding(total_words, embedding_len,input_length=max_review_len)# [b, 80, 100], h_dim: 64#构建两个GRU层,分别代表着state0和state1self.rnn = keras.Sequential([layers.GRU(units, dropout = 0.5, return_sequences = True, unroll = True),layers.GRU(units, dropout = 0.5, unroll = True)])#fc, [b, 80, 100] => [b ,64] => [b, 1]self.outlayer = layers.Dense(1)#最后的一个flatten 输出到全连接层def call(self, inputs, training = None):# call是将类实例的重载 是的类实例对象可以像调用普通函数那样, 以“对象名”的形式调用# [b, 80] 这里将input的输入值传入到xx = inputs#将输入的文本数据进行embedding操作 也就是[b, 80] => [b, 80, 100]x = self.embedding(x)# 将embedding的数据传入构建好的sequential 这里就是调用self.rnn [b, 60, 100] => [b, 64]这里的64是units# 也就是循环神经网络的ht的输出维度x = self.rnn(x)# 传入下一层输出层 也就是flatten [b, 64] => [b, 1]x = self.outlayer(x)# 最后经过激活函数sigmoid 将输出值映射到[0, 1]区间上prob = tf.sigmoid(x)return probdef main():#定义RNN每个Cell 输出的ht的维数units = 64#定义迭代次数为4次epochs = 4import timet0 = time.time()#实例化类 MyRNNmodel = MyRNN(units)#这里因为model 是继承了keras.model的父类的子类,所以可以调用其中方法compile进行优化器,# LOSS函数和相关指标参数设置model.compile(optimizer = keras.optimizers.Adam(0.001),loss = tf.losses.BinaryCrossentropy(),metrics=['accuracy'])#调用类方法.fit进行训练,这里设置训练过程中参考评估数据集为db_testmodel.fit(db_train, epochs = epochs, validation_data = db_test)#评估每次迭代训练过的模型model.evaluate(db_test)t1 = time.time()print('total time cost:', t1 - t0)if __name__ == '__main__':main()

这个是cell形式的,更有助于理解GRU的内部过程

import os
import tensorflow as tf
import numpy as np
from tensorflow import keras
from tensorflow.keras import layerstf.random.set_seed(22)
np.random.seed(22)
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
assert tf.__version__.startswith('2.')batchsz = 128total_words = 10000
max_review_len = 80
embedding_len = 100
(x_train, y_train), (x_test, y_test) = keras.datasets.imdb.load_data(num_words=total_words)x_train = keras.preprocessing.sequence.pad_sequences(x_train, maxlen = max_review_len)
x_test = keras.preprocessing.sequence.pad_sequences(x_test, maxlen=max_review_len)db_train = tf.data.Dataset.from_tensor_slices((x_train, y_train))
db_train = db_train.shuffle(1000).batch(batchsz, drop_remainder=True)db_test = tf.data.Dataset.from_tensor_slices((x_test, y_test))
db_test = db_test.batch(batchsz, drop_remainder=True)print('x_train shape:', x_train.shape, tf.reduce_max(y_train), tf.reduce_min(y_train))
print('x_test shape:', x_test.shape)class MyRNN(keras.Model):def __init__(self, units):super(MyRNN, self).__init__()#这里与layers类型不同,需要对state0和state1两个cell状态分别定义,因为GRU的循环过程#就是从state0进行门运算后产生输出至state1然后更新state0,然后有经过state1返回来,注意这里因为比LSTM少一个门#所以只有一个tf.zerosself.state0 = [tf.zeros([batchsz, units])]self.state1 = [tf.zeros([batchsz, units])]self.embedding = layers.Embedding(total_words, embedding_len,input_length = max_review_len)#这里因为是以cell形式构建的,所以需要不能用sequential形式构建网络,这里逐个定义cell0和cell1self.rnn_cell0 = layers.GRUCell(units, dropout = 0.5)self.rnn_cell1 = layers.GRUCell(units, dropout = 0.5)self.outlayer = layers.Dense(1)def call(self, inputs, training = None):x = inputsx = self.embedding(x)state0 = self.state0state1 = self.state1# 这里将文本按照第二个维度展开 并将每个词映射成一个100维的向量,循环按照第二个维度一个一个词迭代for word in tf.unstack(x, axis = 1):out0, state0  =self.rnn_cell0(word, state0, training)out1, state1 = self.rnn_cell1(out0, state1, training)x = self.outlayer(out1)prob = tf.sigmoid(x)return probdef main():units = 64epochs = 4import  timet0 = time.time()model = MyRNN(units)model.compile(optimizer = keras.optimizers.Adam(0.001),loss = tf.losses.BinaryCrossentropy(),metrics = ['accuracy'])model.fit(db_train, epochs = epochs, validation_data = db_test)model.evaluate(db_test)t1 = time.time()print('total time cost:', t1 - t0)if __name__ =="__main__":main()

Tensorflow 2 循环神经网络 GRU 豆瓣IMDB影评数据集训练模型相关推荐

  1. ML之NB、LoR:基于NB和LoR算法对Kaggle IMDB影评数据集(国外类似豆瓣电影)情感分析进行分类

    ML之NB.LoR:基于NB和LoR算法对Kaggle IMDB影评数据集(国外类似豆瓣电影)情感分析进行分类 注:LoR code waiting 目录 输出结果 核心代码 输出结果 数据集:Dat ...

  2. 神经网络学习小记录2——利用tensorflow构建循环神经网络(RNN)

    神经网络学习小记录2--利用tensorflow构建循环神经网络(RNN) 学习前言 RNN简介 tensorflow中RNN的相关函数 tf.nn.rnn_cell.BasicLSTMCell tf ...

  3. NLP之TEA之NB/LoR:基于NB和LoR算法对Kaggle IMDB影评数据集(国外类似豆瓣电影)情感分析进行分类

    NLP之TEA之NB/LoR:基于NB和LoR算法对Kaggle IMDB影评数据集(国外类似豆瓣电影)情感分析进行分类 注:LoR code waiting 目录 输出结果 核心代码 输出结果 数据 ...

  4. NLP之NBGBT:基于朴素贝叶斯(count/tfidf+网格搜索+4fCrva)、梯度提升树(w2c+网格搜索+4fCrva)算法对IMDB影评数据集进行文本情感分析(情感二分类预测)

    NLP之NB&GBT:基于朴素贝叶斯(count/tfidf+网格搜索+4fCrva).梯度提升树(w2c+网格搜索+4fCrva)算法对IMDB影评数据集进行文本情感分析(情感二分类预测) ...

  5. tensorflow实现循环神经网络——经典网络(LSTM、GRU、BRNN)

    参考链接: https://www.cnblogs.com/tensorflownews/p/7293859.html http://www.360doc.com/content/17/0321/10 ...

  6. Tensorflow创建循环神经网络

    虽然已经接触deep learning很长一段时间了,也看了很久rnn相关的代码,但是突然想用tensorflow实现一些功能的时候,突然发现丝毫没有头绪,找了一些资料,学习了一波,记录一下. 一.t ...

  7. 深度学习实战:tensorflow训练循环神经网络让AI创作出模仿莎士比亚风格的作品

    AI创作莎士比亚风格的作品 训练一个循环神经网络模仿莎士比亚 FLORIZEL: Should she kneel be? In shall not weep received; unleased m ...

  8. TensorFlow 堆叠循环神经网络(深层循环神经网络)

    堆叠循环神经网络,又叫深层循环神经网络,就是将多个循环神经网络堆叠起来.在TensorFlow中,提供了tf.keras.layers.StackedRNNCells()类来封装堆叠神经网络的单元.要 ...

  9. TensorFlow构建循环神经网络

    前言 前面在<循环神经网络>文章中已经介绍了深度学习的循环神经网络模型及其原理,接下去这篇文章将尝试使用TensorFlow来实现一个循环神经网络,该例子能通过训练给定的语料生成模型并实现 ...

最新文章

  1. sql 判断分钟是偶数数据_使用SQL交换座位(奇偶数的用法)
  2. junit 测试遇上java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing 错误
  3. Google调查了人们过去24小时的观看记录,发现了这些......
  4. 细细讲述Java技术开发的那些不为人知的规则
  5. java8默认垃圾回收器,Java 8的默认垃圾收集器
  6. (ssh整合web导出excel)在ssh框架中使用poi正确导出具有比较高级固定格式的excel 整体过程,查询导出前后台下载...
  7. django-模板语言-循环语句
  8. 如何在Go中实现Elasticsearch
  9. 2017年春季计算机试题,【2017年整理】计算机试题.doc
  10. 构建嵌入式系统软件开发环境-为开发板安装linux系统
  11. Ping/Pong Buffer in ARINC429 Block transmitting Mode
  12. JAVA 获取音频文件(ogg格式)毫秒时长
  13. 完美解决“word无法创建工作文件,请检查临时环境变量”
  14. linux centos dhcpd进程,centos7 – 如何在Centos 7上忽略dhcpd中未使用的网络接口
  15. ping 命令的用法大全(图文详解)
  16. 这不就是微信朋友圈屏蔽功能吗?推特现在才做出来未免太迟了吧
  17. python中remove函数的用法_Remove函数用法
  18. ATF 安全启动过程
  19. 厚涂简不简单?怎么入门厚涂
  20. 蓄电池单格电压多少伏_蓄电池的输出电压一般是多少

热门文章

  1. 调用Xmlrpc接口
  2. python_线程读写操作一
  3. Docker学习2-虚拟化
  4. Docker Weave 介绍 or 工作原理
  5. java实现中缀表达式转后缀表达式
  6. 【bzoj2929】[Poi1999]洞穴攀行 网络流最大流
  7. github 上 Fork 别人的项目后的常用的操作指南
  8. 排序规则在拼音处理中的应用.sql
  9. 静态成员内部类和非静态成员内部类的实例化方式
  10. Spring – IoC 容器