zoukankan      html  css  js  c++  java
  • tensorflow2.0——实现先卷积后LSTM的网络

    class MyRnn(tf.keras.Model):
        def __init__(self, units):
            super(MyRnn, self).__init__()
            self.mycnn = tf.keras.Sequential([
                tf.keras.layers.Conv2D(12, kernel_size=[3, 3], activation=tf.nn.relu),
                tf.keras.layers.BatchNormalization(),
                tf.keras.layers.MaxPool2D(pool_size=[3, 3], strides=3, padding='same'),
                tf.keras.layers.Conv2D(24, kernel_size=[4, 4], activation=tf.nn.relu),
                tf.keras.layers.BatchNormalization(),
                tf.keras.layers.MaxPool2D(pool_size=[3, 3], strides=3, padding='same'),
                tf.keras.layers.Conv2D(48, kernel_size=[3, 3], activation=tf.nn.relu),
                tf.keras.layers.BatchNormalization(),
                tf.keras.layers.AveragePooling2D(pool_size=[8, 8], strides=8, padding='same'),
                tf.keras.layers.Flatten()
            ])
    
            #   [b,80,100] ,-> h_dim:units(比如64)
            self.units = units
            #     # [b, 80, 100] = > [b, 64]
            #     self.rnn_cell0 = tf.keras.layers.LSTMCell(units,dropout=0.5)
            #     self.rnn_cell1 = tf.keras.layers.LSTMCell(units, dropout=0.5)
            self.myrnn = tf.keras.Sequential([
                tf.keras.layers.LSTM(units, return_sequences=True, unroll=True),
                tf.keras.layers.LSTM(units, return_sequences=True, unroll=True),
                tf.keras.layers.LSTM(units, unroll=True),
            ])
    
            #   fc , [b,80,100] =>[b,64]=>[b,1]
            self.myDense = tf.keras.Sequential([
                tf.keras.layers.Dense(128, activation='relu'),
                tf.keras.layers.Dense(128, activation='relu'),
                tf.keras.layers.Dense(1, bias_initializer=tf.keras.initializers.constant(0.))
            ])
    
    
        def __call__(self, inputs, training=None):
            """
            :param inputs:[b,80] [b,句子最大长度(80)]
            :param training:
            """
            # [b,80]
            x = tf.cast(inputs,dtype=tf.float32)
    
            # print('x进:',x.shape)
            out = tf.keras.layers.TimeDistributed(self.mycnn)(x)
            # print('cnnout:', out.shape)
    
            out = self.myrnn(out)
            # print('out:', out.shape)
            # out = tf.squeeze(out)
    
            x = self.myDense(out)
            return x
    
    
    #   定义优化器
    opt = tf.keras.optimizers.Adam(lr=learn_rate)
    sum_model = MyRnn(128)
  • 相关阅读:
    跨域是什么
    【剑指offer】05-替换空格
    【剑指offer】04-二维数组中的查找
    【剑指offer】03-变态跳台阶
    【剑指offer】02-青蛙跳台阶
    【剑指offer】01-斐波那契数列
    python面向对象-类和实例
    LibreOffice字体问题解决;从window复制到Ubuntu
    Far manager界面混乱问题解决
    Ubuntu-18.04.2-几个启动错误解决办法
  • 原文地址:https://www.cnblogs.com/cxhzy/p/13968503.html
Copyright © 2011-2022 走看看