基于RNN/LSTM/GRU的情感预测实战

​1.RNN简介

人类并不是每时每刻都从一片空白的大脑开始他们的思考。在你阅读这篇文章时候,你都是基于自己已经拥有的对先前所见词的理解来推断当前词的真实含义。我们不会将所有的东西都全部丢弃,然后用空白的大脑进行思考。我们的思想拥有持久性。

传统的神经网络并不能做到这点,看起来也像是一种巨大的弊端。例如,假设你希望对电影中的每个时间点的时间类型进行分类。传统的神经网络应该很难来处理这个问题——使用电影中先前的事件推断后续的事件。

RNN 解决了这个问题。RNN 是包含循环的网络,允许信息的持久化。

2.基于imdb数据集的SimpleRNNCell实战

#RNN-情感分类实战

import os

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

import tensorflow as tf

import numpy as np

from tensorflow import keras

from tensorflow.keras import layers,datasets

tf.random.set_seed(1234)

np.random.seed(2345)

assert tf.__version__.startswith('2.')#判断tensorflow的类型是否开头是2.版本(写2/2.0都可以)

batchsize = 80

#假设常见单词有10000个,但是我们都知道,词库当中的单词有很多,肯定要超过一万个

total_words = 10000

#为了方便我们的网络训练和数据处理,我们把每个句子的单词个数统一设置成80,通过下面的padding操作处理

max_review_len = 80

#这样的话是说每个单词通过embedding_len这个方法用一百维的向量去表示

embedding_len = 100

(x_train,y_train),(x_test,y_test) = 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)

#经过padding之后,x_train:[b,80],x_test:[b,80]->b个句子,每个句子80个单词

db_train = tf.data.Dataset.from_tensor_slices((x_train,y_train))

db = db_train.shuffle(25000).batch(batchsize,drop_remainder=True)

#出现剩下的句子个数不足128的情况,这样我们就不再进行训练--定长训练RNN

db_test = tf.data.Dataset.from_tensor_slices((x_test,y_test))

db_test = db_test.shuffle(25000).batch(batchsize,drop_remainder=True)

#出现剩下的句子个数不足128的情况,这样我们就不再进行测试--定长测试RNN

print('x_train_shape:',x_train.shape,)#(25000, 80)--25k个句子

print('x_test-shape:',x_test.shape)#(25000, 80)

print('y_train_shape:',y_train.shape,)#(25000,)

print('y_test-shape:',y_test.shape)#(25000,)

print(tf.reduce_min(y_train),tf.reduce_max(y_train),#min-0差评Neg,max-1好评Pos

      tf.reduce_min(y_test),tf.reduce_max(y_test))#min-0,max-1

class MyRNN(keras.Model):

    def __init__(self,units):

        super(MyRNN,self).__init__()

        self.state0 = [tf.zeros([batchsize,units])]#一个batch一个batch的运算/训练/验证/测试

        self.state1 = [tf.zeros([batchsize,units])]

        #[b,80]->[b,80,100]

        self.embedding = layers.Embedding(total_words,embedding_len,input_length=max_review_len)

        #[b,80,100]->[b,64]

        self.rnn1 = layers.SimpleRNNCell(units,dropout=0.2)

        self.rnn2 = layers.SimpleRNNCell(units, dropout=0.2)

   

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xifenglie123321

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值