【问题标题】:How does it works the input_shape variable in Conv1d in Keras?Keras 的 Conv1d 中的 input_shape 变量是如何工作的?
【发布时间】:2019-12-24 12:51:54
【问题描述】:

Ciao, 我在 Keras 上使用 CNN 1d,但我在输入形状变量方面遇到了很多麻烦。

我有一个包含 100 个时间步长和 5 个带有布尔标签的特征的时间序列。我想训练一个使用长度为 10 的滑动窗口的 CNN 1d。这是我编写的一个非常简单的代码:

from keras.models import Sequential
from keras.layers import Dense, Conv1D
import numpy as np

N_FEATURES=5
N_TIMESTEPS=10
X = np.random.rand((100, N_FEATURES))
Y = np.random.randint(0,2, size=100)


# CNN
model.Sequential()
model.add(Conv1D(filter=32, kernel_size=N_TIMESTEPS, activation='relu', input_shape=N_FEATURES
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

我的问题是我收到以下错误:

  File "<ipython-input-2-43966a5809bd>", line 2, in <module>
    model.add(Conv1D(filter=32, kernel_size=10, activation='relu', input_shape=N_FEATURES))
TypeError: __init__() takes at least 3 arguments (3 given)

我还尝试将以下值传递给 input_shape:

input_shape=(None, N_FEATURES)
input_shape=(1, N_FEATURES)
input_shape=(N_FEATURES, None)
input_shape=(N_FEATURES, 1)
input_shape=(N_FEATURES, )

你知道代码有什么问题吗,或者你能解释一下 Keras CNN 中 input_shape 变量背后的逻辑吗?

疯狂的是,我的问题与以下相同:

Keras CNN Error: expected Sequence to have 3 dimensions, but got array with shape (500, 400)

但是我无法用帖子中给出的解决方案来解决它。

Keras 版本是 2.0.6-tf

谢谢

【问题讨论】:

    标签: python tensorflow keras conv-neural-network


    【解决方案1】:

    这应该可行:

    from keras.models import Sequential
    from keras.layers import Dense, Conv1D
    import numpy as np
    
    N_FEATURES=5
    N_TIMESTEPS=10
    X = np.random.rand(100, N_FEATURES)
    Y = np.random.randint(0,2, size=100)
    
    # Create a Sequential model
    model = Sequential()
    # Change the input shape to input_shape=(N_TIMESTEPS, N_FEATURES)
    model.add(Conv1D(filters=32, kernel_size=N_TIMESTEPS, activation='relu', input_shape=(N_TIMESTEPS, N_FEATURES)))
    # If it is a binary classification then you want 1 neuron - Dense(1, activation='sigmoid')
    model.add(Dense(1, activation='sigmoid'))
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    

    请查看每行代码之前的 cmets。此外,Conv1D 期望的输入形状是(time_steps, feature_size_per_time_step)。你的代码的翻译是(N_TIMESTEPS, N_FEATURES)

    【讨论】:

    • 非常感谢,密集的东西是一个错字。似乎“过滤器”和“过滤器”有所不同,但我不知道为什么。在 Conv1D 文档中,正确的参数是“fitlers”,所以我会期待有关它的错误消息。它现在如何正确编译。
    猜你喜欢
    • 2021-12-31
    • 2020-12-03
    • 2019-06-28
    • 2019-07-14
    • 2020-11-06
    • 1970-01-01
    • 2022-07-11
    • 1970-01-01
    • 2019-09-23
    相关资源
    最近更新 更多