tensorflow2.0——LSTM,GRU(Sequential层版)

   2023-02-10 学习力907
核心提示:前面都是写的cell版本的GRU和LSTM,比较底层,便于理解原理。下面的Sequential版不用自定义state参数的形状,使用更简便: import tensorflow as tfimport osos.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'assert tf.__version__.startswith('2.')# 设置相关底层

前面都是写的cell版本的GRU和LSTM,比较底层,便于理解原理。

下面的Sequential版不用自定义state参数的形状,使用更简便:

 

import tensorflow as tf
import os

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
assert tf.__version__.startswith('2.')

#   设置相关底层配置
physical_devices = tf.config.experimental.list_physical_devices('GPU')
assert len(physical_devices) > 0, "Not enough GPU hardware devices available"
tf.config.experimental.set_memory_growth(physical_devices[0], True)

#   只取10000个单词,超过10000的按生僻词处理
total_words = 10000
max_sentencelength = 121         #   每个句子最大长度
batchsize = 2000
embedding_len = 100             #   将单词从原来的的一个数扩充为100维的向量

(x_train,y_train),(x_test,y_test) = tf.keras.datasets.imdb.load_data(num_words=total_words)         #   numweord为单词种类个数
print('x_train.shape:',x_train.shape)
print('x_train[3]:',len(x_train[3]),x_train[3])
x_train = tf.keras.preprocessing.sequence.pad_sequences(x_train,maxlen = max_sentencelength)        #   把句子长度限制为定长
print('x_train[3]:',len(x_train[3]),x_train[3])
x_test = tf.keras.preprocessing.sequence.pad_sequences(x_test,maxlen = max_sentencelength)
#   x_train : [b,80] [b,max_sentencelength]   b个句子,每句80(max_sentencelength)个单词
#   x_test : [b,80]
print('x_train.shape:',x_train.shape)
# print('x_train[3]:',x_train[3].shape,x_train[3])
print('y_train.shape:',y_train.shape,tf.reduce_max(y_train),tf.reduce_min(y_train))
db_train = tf.data.Dataset.from_tensor_slices((x_train,y_train))
db_train = db_train.shuffle(1000).batch(batch_size=batchsize,drop_remainder=True)   #   设置drop参数可以把最后一个batch如果与前面的batch长度不一样,就丢弃掉
db_test = tf.data.Dataset.from_tensor_slices((x_test,y_test))
db_test = db_test.batch(batch_size=batchsize,drop_remainder=True)

class MyRnn(tf.keras.Model):
    def __init__(self,units):
        super(MyRnn,self).__init__()
        #   [b,80] => [b,80,100]

        #   [b,64] [b,units]
        # self.state0 = [tf.zeros([batchsize,units])]

        self.embedding = tf.keras.layers.Embedding(total_words,embedding_len,input_length = max_sentencelength)
    #   [b,80,100] ,-> h_dim:units(比如64)
        self.rnn = tf.keras.Sequential([
            tf.keras.layers.LSTM(units, return_sequences=True, unroll=True),
            tf.keras.layers.LSTM(units, unroll=True),
            # tf.keras.layers.GRU(units, return_sequences=True, unroll=True),
            # tf.keras.layers.GRU(units, unroll=True),
        ])
        #   fc , [b,80,100] =>[b,64]=>[b,1]
        self.outlayer = tf.keras.layers.Dense(1)


    def __call__(self, inputs, training = None):
        """
        :param inputs:[b,80] [b,句子最大长度(80)]
        :param training:
        """
        # [b,80]
        x = inputs
        print('x.shape:',x.shape)
        #   embedding:[b,80]=>[b,80,100]
        x = self.embedding(x)

        #   [b,80,100] = [b,64]
        x = self.rnn(x)

        # out:[b,64] => [b,1]
        x = self.outlayer(x)
        prob = tf.sigmoid(x)
        return prob

if __name__ == '__main__':
    units = 64
    epochs = 40
    lr = 1e-2
    model = MyRnn(units)
    model.compile(optimizer=tf.keras.optimizers.Adam(lr),
                  loss= tf.losses.BinaryCrossentropy(),     #   二分类的loss函数
                  metrics=['accuracy'])
    model.fit(db_train,epochs=epochs,validation_data=db_test)
    model.evaluate(db_test)

 

 
反对 0举报 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 深度学习-Tensorflow2.2-多分类{8}-多输出模型实例-20
    深度学习-Tensorflow2.2-多分类{8}-多输出模型
    import tensorflow as tffrom tensorflow import kerasimport matplotlib.pyplot as plt%matplotlib inlineimport numpy as npimport pathlibimport osimport randomos.environ['TF_FORCE_GPU_ALLOW_GROWTH'] = 'true'import IPython.display as display
    03-08
  • TensorFlow与Flask结合识别手写体数字
    TensorFlow与Flask结合识别手写体数字
    阅读本文约“2.2分钟”TensorFlow框架        ——TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统        ——可被用于语音识别或图像识别等多项机器学习和深度学习领域        ——TensorFlow是将复杂的数据结构
    03-08
  • 在 GPU 上运行 TensorFlow 教程 (MNIST)
    在 GPU 上运行 TensorFlow 教程 (MNIST)
    介绍我想接触TensorFlow,暂时想运行教程。有GPU!这就是我的想法,但是我很难让它发挥作用,所以我将把信息留在这里。它是为谁准备的?想要在 GPU 上运行 TensorFlow 的人概述基本遵循TensorFlow官方教程它是作为初学者编写的,所以如果它顺利,它很容易!ht
    03-08
  • TensorFlow 开发者证书 PyCharm 相关环境创建与错误斗争+复习
    TensorFlow 开发者证书 PyCharm 相关环境创建与
    介绍2022 年 11 月TensorFlow 开发者证书通过了特定于测试PyCharm我遇到了一个相关的问题,所以我写了这篇文章,因为我想为将来参加考试的人提供有用的信息。 目标:即将考取TensorFlow开发者证书的人 环境:Windows 11 内容:考试过程中出现的错误及解决方法
    03-08
  • TensorFlow基础笔记(7) 图像风格化效果与性能优
    参考 http://hacker.duanshishi.com/?p=1693http://blog.csdn.net/hungryof/article/details/53981959http://blog.csdn.net/hungryof/article/details/61195783http://blog.csdn.net/wyl1987527/article/details/70245214https://www.ctolib.com/AdaIN-style.
    02-09
  • Tensorflow报错总结 TensorFlow文档
    输入不对应报错内容:WARNING:tensorflow:Model was constructed with shape (None, 79) for input Tensor("genres:0", shape=(None, 79), dtype=float32), but it was called on an input with incompatible shape (128, 5).定义模型的输入和训练时候传入的in
    02-09
  • 深度学习框架之TensorFlow的概念及安装(ubuntu
    2015年11月9日,Google发布人工智能系统TensorFlow并宣布开源。TensorFlow 是使用数据流图进行数值计算的开源软件库。也就是说,TensorFlow 使用图(graph)来表示计算任务。图中的节点表示数学运算,边表示运算之间用来交流的多维数组(也就是tensor,张量)
    02-09
  • tensorflow中 tf.train.slice_input_producer 和 tf.train.batch 函数
    tensorflow中 tf.train.slice_input_producer
    tensorflow数据读取机制tensorflow中为了充分利用GPU,减少GPU等待数据的空闲时间,使用了两个线程分别执行数据读入和数据计算。具体来说就是使用一个线程源源不断的将硬盘中的图片数据读入到一个内存队列中,另一个线程负责计算任务,所需数据直接从内存队列
    02-09
  • 机器学习 - pycharm, tensorflow集成篇
    机器学习 - pycharm, tensorflow集成篇
     继续上篇的pyspark集成后,我们再来看看当今热的不得了的tensorflow是如何继承进pycharm环境的参考:  http://blog.csdn.net/include1224/article/details/53452824思路其实很简单,说下要点吧1. python必须要3.5 64位版本(上一篇直接装的是64位版本的An
    02-09
  • tensorflow学习之 Eager execution
    tensorflow学习之 Eager execution
      首先tensorflow本身就是一个声明式的编程。而不是命令式的编程。       1、声明式的编程可以简单理解为先统一列出计算形式或者是表达式,然后最终在会话中进行计算。    2、而命令式就像是python本身就是。有初始值,再写出计算式的时候,运行
    02-09
点击排行