【问题标题】:How to add convolutional layer to Keras model?如何将卷积层添加到 Keras 模型?
【发布时间】:2023-03-08 13:24:01
【问题描述】:

有数据包含A、B、C。C值应由A和B值预测。

数据被分割和缩放。

没有卷积层的模型。

from keras.models import Sequential
from keras.layers import Dense, Conv1D

features_count = len(X_train.columns)

model = Sequential([
    Dense(64, input_shape=(features_count,)),
    Activation('relu'),
    Dense(32),
    Activation('softmax'),
    Dense(1),
])

model.compile(optimizer="adam", loss='mse')
model.fit(X_train.values, y_train.values, epochs=10, batch_size=1, verbose=1)
model.evaluate(X_test, y_test, batch_size=1)

结果:1.0033315420150757

添加了 Conv1D:

model = Sequential([
    Conv1D(filters=256, kernel_size=5, padding='same', activation='relu', input_shape=(features_count,)),
    Dense(64),
    Activation('relu'),
    Dense(32),
    Activation('softmax'),
    Dense(1),
])

结果:输入 0 与层 conv1d_3 不兼容:预期 ndim=3,发现 ndim=2

input_shape=(features_count,)

被替换为

input_shape=(features_count,1)

结果:检查输入时出错:预期 conv1d_4_input 为 3 维,但得到的数组形状为 (3, 2)

这样加卷积层有什么问题?如何在 Keras 模型中添加卷积层?

【问题讨论】:

  • 你想在这里做什么?这些特点是什么?您确定卷积在这里有意义吗(我对此表示怀疑)?如果只有 2 个特征,为什么要将过滤器大小设置为 5?
  • 我有一个 100Mb 的数据集,包含 750 个特征——在这里我对其进行了简化。正如我所写的,我需要从 A 和 B 预测值 C。这只是一个例子。我正在尝试添加一个卷积层来提高 MSE。过滤器大小为 5 - 好的,我会修复它
  • 只有当输入数据是一个序列时,使用 Conv1D 才有意义,即值的顺序很重要。这适用于您的数据集吗?还是数据集中的每一行都独立于其他行?如果是这样,那么使用 Conv1D 或 RNN 就没有意义了。
  • @today 是的,它是每日股票收盘价。我正在尝试做的是从与所选股票代码具有足够相关性的其他股票价格预测股票价格。
  • 此外,如果您不清楚一维卷积的工作原理,this answer 可能会帮助您更好地理解它。

标签: python keras conv-neural-network


【解决方案1】:

Conv1D 需要二维数据,因为它可以沿第二维对第一维应用卷积。因此,您的输入数据必须具有形状(批量大小,1、2)。但是,Dense 层需要 1D,因此您需要在 Conv1D 和 Dense 之间添加一个 Flatten 层来将您的数据转换为 1D。

from keras.models import Sequential
from keras.layers import Dense, Conv1D, Activation, Flatten
import numpy as np
X_train = np.array([[-1.0,-1.0], [1.0, -1.0], [1.0,1.0]])
y_train = np.array([[1.0], [-1.0], [0.0]])

X_test = np.array([[1.0,-1.0], [1.0, -1.0]])
y_test = np.array([[1.0], [-1.0]])

features_count = 2

model = Sequential([
    Conv1D(filters=256, kernel_size=5, padding='same', activation='relu', input_shape=(1,features_count)),
    Flatten(),
    Dense(64),
    Activation('relu'),
    Dense(32),
    Activation('softmax'),
    Dense(1),
])

X_train = X_train.reshape(X_train.shape[0], 1, X_train.shape[1])
X_test = X_test.reshape(X_test.shape[0], 1, X_test.shape[1])

model.compile(optimizer="adam", loss='mse')
model.fit(X_train, y_train, epochs=10, batch_size=1, verbose=1)
model.evaluate(X_test, y_test, batch_size=1)

结果: 1.00140380859375

希望对您有所帮助。

【讨论】:

  • 我无法添加此图层 2 周。最后,它正在工作。谢谢!
  • 很高兴它对您有所帮助!
猜你喜欢
  • 2017-01-09
  • 2020-09-07
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多