【问题标题】:Adding an additional value to a Convolutional Neural Network Input? [closed]向卷积神经网络输入添加附加值? [关闭]
【发布时间】:2018-05-28 20:59:05
【问题描述】:

我有一个要输入到卷积神经网络模型的图像数据集,但是,对于这些图像中的每一个,与图像相关联的对象都有一个范围或距离。

我想输入这个范围作为 CNN 模型的附加上下文。

提供这条额外的信息有什么好处吗?这样做有意义吗?在 Keras 是否可行?

谢谢!

【问题讨论】:

  • 很遗憾,您的问题被标记为过于宽泛。我建议进行编辑以指定您尝试预测的输出类型,并添加几行 Keras 代码来说明您的网络架构当前的样子。这应该使问题更具体。

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


【解决方案1】:

您有几个选项,其中一个是将您的数值编码为输入中的特征平面。如果您的数值是c,您可以为每个输入图像添加一个通道,每个像素处的值为c

另一种选择是将值合并为全连接层的附加输入。

在 keras 中,这看起来像:

conv = Sequential()
conv.add(Conv2D(32, kernel_size=(3, 3), strides=(1, 1),
                 activation='relu',
                 input_shape=input_shape))
conv.add(MaxPooling2D(pool_size=(2, 2)))
conv.add(Flatten())
conv.add(Dense(512, activation='relu'))

range_ = Sequential()
range_.add(Dense(1, input_shape=(1,), activation='relu'))

merged = Concatenate([conv, range_])
merged.add(Dense(n_classes, activation='softmax'))

merged.compile(optimizer='adam', loss='binary_crossentropy',
           metrics=['accuracy'])

您选择哪个选项将取决于您的数据,以及您是否认为数值特征将有助于卷积层更好地理解输入,或者您是否认为稍后才需要它。如果您有时间,您可以尝试两种架构,看看哪个性能更好。

【讨论】:

  • 非常感谢先生,但是我如何将训练数据传递给图像 (RBG) 到 Conv 和数值数据到 Range
  • 我认为这两种方式都可以,但是在每个点添加一个带有 c 值的通道似乎效率低下,并且稍微浪费了参数。如果您使用 3x3 卷积,则其中 8 个参数实际上是多余的。有没有可以更有效地做到这一点的自定义层?
  • 谢谢你,伊姆兰。将其作为单个输入添加到 NN 的方法是否有名称?我正在尝试找到一篇论文来提供有关此方法的一些解释/直觉,以供引用。虽然看起来没有太多工作要做。
  • @M.HosseinRahimi 也许是“多输入,多输出”keras.io/guides/functional_api/…
猜你喜欢
  • 1970-01-01
  • 2018-01-25
  • 2019-09-06
  • 2020-09-27
  • 2020-10-19
  • 2017-07-30
  • 2017-08-31
  • 2016-10-20
  • 2020-05-26
相关资源
最近更新 更多