【keras】Conv1D层与Dense层的连接

今天在编写一个一维卷积神经网络做预测时,出现了很多报错。

def baseline_model():
    model = Sequential()
    model.add(Conv1D(filters=5, kernel_size=1, strides=3,input_shape=(235,1)))#卷积层
    model.add(Dense(units=25, input_dim=(50,),activation='tanh'))#全连接层
    model.add(Dense(9, activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
    return model

首先在网络中将一维卷积作为输入层时出现如下报错:

ValueError: Error when checking input: expected conv1d_11_input to have 3 dimensions, but got array with shape (869, 235)

以下是我导入的测试集:

X = df.values[:, 0:235].astype(float)
Y = df.values[:, 235]

X和Y的形状分别是:

X.shape: (869, 235)
Y.shape: (869,)

意思其实也很明白,就是模型希望输入一个3维的变量进来,结果输入进来了(899,246)这个二维变量。

这时我们给X增加一维:

X = np.expand_dims(df.values[:, 0:235].astype(float), axis=2)#增加一维轴
Y = df.values[:, 235]

此时X的形状变成:

X.shape: (869, 235, 1)
Y.shape: (869,)

继续运行程序,发现卷积层已经通过,而新的问题出现在了全连接层:

ValueError: Error when checking target: expected dense_2 to have 3 dimensions, but got array with shape (809, 9)

全连接层一般喜欢接收到一个一维的向量,这里我们需要加一层压平层:

model.add(Flatten())

def baseline_model():
    model = Sequential()
    model.add(Conv1D(filters=5, kernel_size=1, strides=3,input_shape=(235,1)))#卷积层
    model.add(Flatten())
    model.add(Dense(units=25, input_dim=(50,),activation='tanh'))#全连接层
    model.add(Dense(9, activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
    return model

Flatten层用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过渡。

也可以是model.add(GlobalAveragePooling1D()),全局平均值池化,降维的同时减小拟合度。

继续运行,程序开始训练,问题解决!

  • 41
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jiawen9

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值