当数据是单变量时,如何设置 keras.layers.SimpleRNN 的“input_shape”?

Posted

技术标签:

【中文标题】当数据是单变量时,如何设置 keras.layers.SimpleRNN 的“input_shape”?【英文标题】:How can I set 'input_shape' of keras.layers.SimpleRNN, when Data is unvariate? 【发布时间】:2021-10-23 01:51:01 【问题描述】:

我正在尝试使用RNN进行时间序列预测,但是keras.layers.SimpleRNN'input_shape'中不断出现错误,

但我无法解决,所以我想问一个问题。

首先,下面是代码。这是错误信息

ValueError: Input 0 of layer sequential is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: (None, 1)
# X_train.shape = (58118,)
# y_train.shape = (58118,)

X_train, X_test, y_train, y_test = train_test_split(x,y,test_size=0.2,shuffle=False,random_state=1004)

X_train,X_val,y_train,y_val = train_test_split(X_train,y_train,test_size=0.125,shuffle=False,random_state=1004)

print(X_train.shape)
print(y_train.shape)

with tf.device('/gpu:0'):
    model = keras.models.Sequential([
        keras.layers.SimpleRNN(20, return_sequences=True, input_shape=[None,1]),
        keras.layers.SimpleRNN(20, return_sequences=True),
        keras.layers.TimeDistributed(keras.layers.Dense(10))
    ])

    model.compile(loss="mse", optimizer="adam")
    history = model.fit(X_train, y_train, epochs=20,validation_data=(X_val, y_val)) #Error
    model.save('rnn.h5')

【问题讨论】:

它需要一个 3D 输入为 (batch_size, n_timesteps, n_features) 但是你传递了一个形状为 (58118,). 的数组,它是一个 1D 数组。 将数据重塑为(1, -1, 1) 【参考方案1】:

SimpleRNN 需要输入:一个 3D 张量,形状为 [batch, timesteps, feature]

示例代码

inputs = np.random.random([32, 10, 8]).astype(np.float32)
simple_rnn = tf.keras.layers.SimpleRNN(4)

output = simple_rnn(inputs)  

输出的形状为[32, 4]

【讨论】:

以上是关于当数据是单变量时,如何设置 keras.layers.SimpleRNN 的“input_shape”?的主要内容,如果未能解决你的问题,请参考以下文章

Keras.layer()

自定义Keras Layer

Keras layer.weights 和 layer.get_weights() 给出不同的值

从Keras Layer获得权重

Keras Layer 的 call(x) 和 input_shape

我如何在颤振中动态设置变量的数据?