如何停止Keras订购图层输出?

时间:2019-02-17 19:15:10

标签: python tensorflow keras

我正在尝试在Keras(具有tensorflow后端)中创建一个Conv2D层,我注意到它的输出按升序排序。

例如,考虑一个简单的输入,例如:

_input = np.arange(2 * 2).reshape(2, 2)

结果为:

[[0 1]
 [2 3]]

如果我们将_input变量传递给像这样的卷积层:

from keras.layers import Input, Conv2D
from keras.activations import relu
from keras import Model
import numpy as np

filters = 2
filter_size = 1

_weights = [np.reshape([[2 for _ in range(filters)] for _ in range(filter_size*filter_size)], (filter_size, filter_size, 1, filters)), np.reshape([0 for _ in range(filters)], (filters,))]  # weights for Keras, main weight is array of 2`s while bias weight is array of 0's

keras_input = Input(shape=(2, 2, 1), dtype='float32')

keras_conv = Conv2D(filters=filters, kernel_size=filter_size, strides=(1, 1), activation=relu, padding='valid')(keras_input)

model = Model(inputs=[keras_input], outputs=keras_conv)
model.layers[1].set_weights([_weights[0], _weights[1]])

print(model.predict([_input.reshape(1, 2, 2, 1)]))

我们将获得有序的输出:

[[[[0. 0.]
   [2. 2.]]

  [[4. 4.]
   [6. 6.]]]]

看起来tensorflow做了这样的事情:

  1. 使用每个过滤器对输入执行矩阵乘法
  2. 从第一步开始就向矩阵添加偏差
  3. 对第二步的输出执行升序

我想取消第三步步骤,以便获得如下信息:

[[[[0. 2.]
   [4. 6.]]

  [[0. 2.]
   [4. 6.]]]]

例如,Caffe将跳过订购部分,其输出将与上面的输出完全相同。

这是Caffe进行“卷积”的方式:

[[[[(0*2) + 0 (1*2) + 0]
   [(2*2) + 0 (3*2) + 0]]

  [[(0*2) + 0 (1*2) + 0]
   [(2*2) + 0 (3*2) + 0]]]]

等于:

[[[[0. 2.]
   [4. 6.]]

  [[0. 2.]
   [4. 6.]]]]

完成此操作,如您所见,不会改变我们的输入顺序。

简短

如何阻止Tensorflow(或Keras)命令激活卷积层?我可以传递任何参数来消除这种升序吗?

非常感谢您!

0 个答案:

没有答案