【问题标题】:Input shape of initial_state of tf.keras.layers.LSTMtf.keras.layers.LSTM 的 initial_state 的输入形状
【发布时间】:2019-10-03 13:31:38
【问题描述】:

这里我想构建一个非常基本且简单的字符型 RNN。

假设我的数据集是这样嵌入的:

import numpy as np
 batch_1 = np.array([[1, 2, ...., 20], [21, .....,40], [41,....,60], [61,...., 80]])
 batch_2 = np.array([[...], [...], [...], [...]])
import tensorflow as tf
batch_size = 4
steps_number = 20
hidden_units = 100
keep_prob = 0.5
dim = tf.zeros([batch_size, hidden_units])
input_data = tf.keras.layers.Input(shape=(1, steps_number), batch_size=batch_size)
hidden_1, state_h, state_c = tf.keras.layers.LSTM(units=hidden_units, stateful=True, dropout=keep_prob, return_state=True)(input_data, initial_state=[dim, dim], training=True)
hideen_2 = tf.keras.layers.LSTM(units=hidden_units, stateful=True, dropout=keep_prob, return_state=False)(hidden_1, initial_state=[state_h, state_c], training=True)
hidden3 = tf.keras.layers.Dense(10, activation='relu')(hidden_1)
output = tf.keras.layers.Dense(1, activation='sigmoid')(hidden3)
model = tf.keras.models.Model(input_data, output)

这里我在 hidden_​​2 层遇到了这个错误: ValueError: Shape (100, 4) 的排名必须至少为 3

问题是hidden_​​1层大小的输出应该是[batch_size, steps_number, hidden_​​units]

【问题讨论】:

    标签: tensorflow keras lstm tf.keras


    【解决方案1】:

    这是可行的解决方案,但是我不明白为什么我必须以列数组的形式指定输入形状:

    shape=(steps_number,1) 而不是 (1,steps_number)

    import tensorflow as tf
    batch_size = 4
    steps_number = 20
    hidden_units = 100
    keep_prob = 0.5
    dim = tf.zeros([batch_size, hidden_units])
    input_data = tf.keras.layers.Input(shape=(steps_number,1), batch_size=batch_size)
    hidden_1, state_h, state_c = tf.keras.layers.LSTM(units=hidden_units, stateful=True, dropout=keep_prob, return_state=True, return_sequences=True)(input_data, initial_state=[dim, dim], training=True)
    print(hidden_1.get_shape().as_list)
    hideen_2 = tf.keras.layers.LSTM(units=hidden_units, stateful=True, dropout=keep_prob, return_state=False)(hidden_1, initial_state=[state_h, state_c], training=True)
    hidden3 = tf.keras.layers.Dense(10, activation='relu')(hidden_1)
    output = tf.keras.layers.Dense(1, activation='sigmoid')(hidden3)
    model = tf.keras.models.Model(input_data, output)
    

    【讨论】:

    • 因为tf.keras.layers.LSTM 接受一个 3D 张量,[batch_size, time_steps, num_features]。尽管 OP 没有明确提及功能的数量,但您在定义 shape=(steps_number,1) 时将其视为一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多