tensorflow中的sentiment_analysis_layer

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

tf.random.set_seed(22)
np.random.seed(22)
assert tf.__version__.startswith('2.')

batchsz =128

#the most frequest words
total_words=10000
max_review_len=80
embeding_len= 100
(x_train,y_train),(x_test,y_test) = keras.datasets.imdb.load_data(num_words=total_words)
#x_train:[b,80]
#x_test:[b,80]
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_train,y_train))
db_test=db_test.batch(batchsz,drop_remainder=True)
print('x_train shapeL:',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__()

        #transform text to embedding representation
        #[b,80]=>[b,80,100]
        self.embedding = layers.Embedding(total_words,embeding_len,
                                          input_length=max_review_len)

        #[b,80,100],h_dim:64
        self.rnn = keras.Sequential([
            layers.SimpleRNN(units , dropout=0.5,return_sequences=True,unroll=True),\
            layers.SimpleRNN(units,dropout=0.5,unroll=True)#unroll表示加速
        ])
        #fc,[b,80,100]=>[b,64]=>[b,1]
        self.outlayer = layers.Dense(1)

    def call(self,inputs,training=None):
        """
        net(x) net(x,training=True):train mode
        net(x,training=False):test
        :param inputs: [b,80]
        :param training:
        :return:
        """
        #[b,80]
        x = inputs
        #embedding: [b,80]=>[b,80,100]
        x = self.embedding(x)
        #rnn cell compute
        #x:[b,80,100]=>[b,64]
        x=self.rnn(x)
        #out:[b,64]=>[b,1]
        x = self.outlayer(x)
        #p(y is pos|x)
        prob = tf.sigmoid(x)

        return prob
def main():
    units = 64
    epochs = 4

    model = MyRNN(units)
    model.compile(optimizer = keras.optimizers.Adam(0.001),
                  loss = tf.losses.BinaryCrossentropy(),
                  metrics=['accuracy'],experimental_run_tf_function=False)
    model.fit(db_train, epochs=epochs, validation_data=db_test)

    model.evaluate(db_test)


if __name__ == '__main__':
    main()



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值