相关疑难解决方法(0)

Keras误解了训练数据的形状

我的训练数据的形式(?,15)在哪里?是一个可变长度.

创建模型时,我指定:

inp = Input(shape=(None,15))
conv = Conv1D(32,3,padding='same',activation='relu')(inp)
...
Run Code Online (Sandbox Code Playgroud)

我的训练数据有形状(35730,?,15).

在python中检查这个我得到:

X.shape
Run Code Online (Sandbox Code Playgroud)

产出:(35730,)

X[0].shape
Run Code Online (Sandbox Code Playgroud)

产出:(513,15)

当我尝试将我的模型放在我的训练数据上时,我得到了ValueError:

Error when checking input: expected input_1 to have 3 dimensions, but got array with shape (35730, 1)
Run Code Online (Sandbox Code Playgroud)

我只能通过在单个样本上使用model.train_on_batch()来训练我的模型.

我怎么解决这个问题?似乎keras认为输入数据的形状是(35730,1),实际上是(35730,?,15)

这是keras中的错误还是我做错了什么?

如果重要的话,我正在使用tensorflow后端.这是keras 2

python keras tensorflow

4
推荐指数
1
解决办法
1944
查看次数

如何使用屏蔽层屏蔽 LSTM 自动编码器中的输入/输出?

我正在尝试使用 LSTM 自动编码器以可变长度的序列作为输入进行序列到序列学习,使用以下代码:

inputs = Input(shape=(None, input_dim))
masked_input = Masking(mask_value=0.0, input_shape=(None,input_dim))(inputs)
encoded = LSTM(latent_dim)(masked_input)

decoded = RepeatVector(timesteps)(encoded)
decoded = LSTM(input_dim, return_sequences=True)(decoded)
sequence_autoencoder = Model(inputs, decoded)
encoder = Model(inputs, encoded)
Run Code Online (Sandbox Code Playgroud)

其中inputs原始序列数据用 0 填充到相同的长度 ( timesteps)。使用上面的代码,输出的长度也是timesteps,但是当我们计算损失函数时,我们只需要Ni输出的第一个元素(其中Ni是输入序列 i 的长度,对于不同的序列可能不同)。有谁知道是否有一些好的方法可以做到这一点?

谢谢!

machine-learning autoencoder deep-learning lstm keras

3
推荐指数
1
解决办法
3256
查看次数