【问题标题】:1D Convolutions CNN Keras一维卷积CNN Keras
【发布时间】:2020-11-15 10:10:15
【问题描述】:

我对 Keras 非常陌生,我正在尝试使用一维卷积实现 CNN,以对原始时间序列数据进行二进制分类。每个训练样例有 160 个时间步长,我有 120 个训练样例。训练数据的形状为 (120,160)。代码如下:

X_input = Input((160,1))

X = Conv1D(6, 5, strides=1, name='conv1', kernel_initializer=glorot_uniform(seed=0))(X_input)
X = Activation('relu')(X)
X = MaxPooling1D(2, strides=2)(X)

X = Conv1D(16, 5, strides=1, name='conv2', kernel_initializer=glorot_uniform(seed=0))(X)
X = Activation('relu')(X)
X = MaxPooling1D(2, strides=2)(X)
X = Flatten()(X)
    
X = Dense(120, activation='relu', name='fc1', kernel_initializer=glorot_uniform(seed=0))(X)

X = Dense(84, activation='relu', name='fc2', kernel_initializer=glorot_uniform(seed=0))(X)
    
X = Dense(2, activation='sigmoid', name='fc3', kernel_initializer=glorot_uniform(seed=0))(X)

model = Model(inputs=X_input, outputs=X, name='model')


X_train = X_train.reshape(-1,160,1)   # shape (120,160,1)
t_train = y_train.reshape(-1,1,1)     # shape (120,1,1)
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train)

我得到的错误是expected fc3 to have 2 dimensions, but got array with shape (120, 1, 1)。

我尝试删除每一层,只留下“conv1”组件,但我收到错误expected conv1 to have shape (156, 6) but got array with shape (1, 1)。看来我的输入形状是错误的;但是,看看其他示例,这似乎对其他人有用。

【问题讨论】:

    标签: machine-learning keras conv-neural-network


    【解决方案1】:

    我认为问题不在于您的投入,而在于您的目标。

    模型的输出是二维的,但是当它检查目标时,它意识到目标在一个形状为 (120, 1, 1) 的数组中。

    您可以尝试如下更改 y_train 重塑线(仅供参考,您似乎不小心输入了 t_train 而不是 y_train):

    y_train = y_train.reshape(-1,1)
    

    此外,您可能希望在最后一个 Dense 层中使用 1 而不是 2(请参阅 Difference between Dense(2) and Dense(1) as the final layer of a binary classification CNN?)

    【讨论】:

    • 仅供参考,如果这回答了您的问题,您可以单击答案旁边的复选标记。否则它将继续显示为未回答的问题。
    猜你喜欢
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 2018-07-29
    • 2016-12-04
    • 2018-07-11
    • 1970-01-01
    相关资源
    最近更新 更多