【问题标题】:Keras convolutional net classification adding 1D extra feature possible?Keras 卷积网络分类可以添加 1D 额外特征吗?
【发布时间】:2018-04-16 09:22:15
【问题描述】:

我已经使用 Keras 构建了一个成功的卷积网络,从 EEG 中对某些大脑活动进行分类。然而,我想通过添加一个我们知道它可以预测这种大脑活动的额外特征来改进它;年龄,当然是不同比例的一维数组。我该怎么办?

我可以在“图像”中添加年龄作为额外维度吗?或者我应该使用年龄对不同模型中的大脑活动进行分类,然后合并两个模型?或者有什么选择?

> X.shape  
 (745,13,60,1) (Trials, channels, frequencies, extra_dim)

> age.shape
(745,)

感谢您提供任何提示并与我一起思考!

最好的,

汉内克

【问题讨论】:

  • 年龄不只是另一个输入吗?
  • 我只是不确定如何将它“放入”到 Keras API 卷积网络中,例如:def conv5(self,units = 512): inp = Input(shape = self.shape [1:], name='inp') x = Conv2D(units, kernel_size=(1,1), strides = (1,1), activation='relu', data_format='channels_last', name='conv1' )(inp) 等等等等等等。
  • 每个脑电图数据是时间线还是单张图片?
  • 感谢您与我一起思考!我有 745 个试验,每个试验由 13 个通道(线)组成,有 60 个频点,矩阵中的值代表功率谱。
  • 所以,这是一个有 60 个步骤和 13 个通道的时间线?

标签: python tensorflow deep-learning keras convolutional-neural-network


【解决方案1】:

不相关:为什么会有额外的暗淡?你在使用 Conv2D 吗?使用 Conv1D 和 (exams, timeSteps, channels) 可能会获得更好的结果。

另外:你确定你使用的是data_format='channels_first'吗? Keras 的默认值为data_format='channels_last'


Conv2D 的答案:

您必须选择一种交互这两组数据的形式。这种互动可以很有创意,没有规则。两种可能:

  • 将此一维值乘以某处,或相加,或考虑好的操作(需要具有两个输入的功能性 API 模型)。
  • 将年龄作为附加通道添加到每个步骤(我喜欢这个)

将年龄添加为附加频道:

x_with_age = np.empty((745,14,60,1)) 
age = age.reshape((745,1,1,1))

x_with_age[:,:13] = X
x_with_age[:,-1:] = age

使用x_with_age 作为输入来训练模型。


如果遵循 Conv1D 建议:

#this is using channels_last, which is keras' default   
#if your data is channels_first, then just invert the shapes below

X = should be something like (745, 60, 13)

x_with_age = np.empty((745,60,14)) 
age = age.reshape((745,1,1))

x_with_age[:,:,:13] = X
x_with_age[:,:,-1:] = age

【讨论】:

  • 非常感谢!我将矩阵视为 13(EEG 通道而不是 RGB 通道(抱歉造成混淆))乘以 60(频率点)像素的 745 张图片!我现在有一个带有 np.expand_dims(X, axis = -1) 和 'channels_last' 的 3d 矩阵。顺便说一句,验证准确率平均为 85-93%。 (分类交叉熵)验证损失约 0.25%。我选择分类是因为我想知道模型的确定性。那么我还需要使用 channels_first 吗?那么随着年龄增长的额外渠道是否仍然有效?我认为以我构建矩阵的方式在第三轴上更有意义?
  • Channels first or last 是一个不会改变结果的选项。这与您的偏好以及数据的组织方式有关。如果您更改此选项,请确保也置换或交换数据的轴。我问是因为我对你的 4D 数据感到困惑。
  • 所以...您已经在“keras 像素”中转换了“EEG 通道”并只保留了“一个 keras 通道”。是这样吗?
  • 是的,我做到了。现在我在第三轴上添加了一个额外的频道。非常感谢丹尼尔,它似乎工作得很好,提高了准确性!该模型仍然有点过拟合,但我现在将开始调整超参数和正则化/dropout。祝你下午愉快!
最近更新 更多