【问题标题】:How does keras decide the type of kernel use?keras 如何决定内核使用的类型?
【发布时间】:2017-08-12 15:33:59
【问题描述】:

这里是使用 Keras 添加的卷积层的典型示例

conv_model.add(Convolution2D(filters, kernel_size[0]
              , kernel_size[1], input_shape=(1, 28, 28)))

这里的过滤器基本上是层所拥有的内核数量。我的问题很简单。 Keras 如何决定它必须放入的内核类型,比如高斯内核? (使用 TensorFlow 后端)

【问题讨论】:

  • 一旦给定内核初始化器,过滤器就会被初始化,但随着实际过滤器值的学习,值会发生变化。你问的是这个吗?
  • 您是想说过滤器值首先像普通神经网络中的权重一样随机初始化,然后随着时间的推移而学习?
  • 没错,就是这样。
  • 我相信 OP 被“内核”这个词弄糊涂了,这个词在 ML 中有几十个含义。 “高斯内核”的建议看起来像 OP 将内核称为希尔伯特空间中的点积(如在 SVM 中),这是正确的理解@Tanmay 吗?如果是这样,convnet 中的“内核”与这个概念无关,它只是一个“命名冲突”,在 CNN 中,“内核”是一个与信号进行卷积的矩阵,它(正如 Matias 建议的那样)完全可学习的、端到端的,因此没有内核“类型”,从某种意义上说,它始终是“线性的”。
  • 是的,我说的是我们用于卷积矩阵的内核。所以矩阵是随机初始化的,然后随着时代的发展而学习?

标签: python-3.x tensorflow keras conv-neural-network


【解决方案1】:

您可以使用kernel_initializer 明确声明

# function signature, here you can specify the kernel using kernel_initializer
keras.layers.convolutional.Conv1D(filters, kernel_size, strides=1,
                                  padding='valid', dilation_rate=1,
                                  activation=None, use_bias=True,
                                  kernel_initializer='glorot_normal',
                                  bias_initializer='zeros',
                                  kernel_regularizer=None,
                                  bias_regularizer=None,
                                  activity_regularizer=None,
                                  kernel_constraint=None,
                                  bias_constraint=None)

【讨论】:

    猜你喜欢
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 2021-02-16
    • 2011-01-26
    • 1970-01-01
    相关资源
    最近更新 更多