keras - 如何在 Keras 中向 Conv2D 层添加自定义“过滤器”
问题描述
我的研究项目要求我在 Keras 的 Conv2D 层中添加一些自定义“过滤器”(除了 Conv2D 自己训练的过滤器)。我怎样才能做到这一点?我可以通过构建任何“自定义层”来实现这一点吗?如果是的话,任何人都可以向我指出可以帮助我实现这一目标的资源吗?
我尝试理解 github 中的 Conv2D 代码,但无法理解它在哪里以及如何处理它的过滤器。
我期待找到一种方法将我的自定义过滤器添加到 conv2d 层中,例如 .. [[1 0 0][0 1 0][0 0 1]] 以便在预测过程中将图像与我提供的过滤器进行卷积.
解决方案
在 keras 中,这很简单。
让我们举个例子。假设我们想将自定义过滤器应用于输入矩阵(图像) -
必要的进口
import keras.backend as K
import numpy as np
from keras import Input, layers
from keras.models import Model
自定义过滤器的定义
# custom filter
def my_filter(shape, dtype=None):
f = np.array([
[[[1]], [[0]], [[-1]]],
[[[1]], [[0]], [[-1]]],
[[[1]], [[0]], [[-1]]]
])
assert f.shape == shape
return K.variable(f, dtype='float32')
虚拟示例输入图像(1 通道)
input_mat = np.array([
[ [4], [9], [2], [5], [8], [3] ],
[ [3], [6], [2], [4], [0], [3] ],
[ [2], [4], [5], [4], [5], [2] ],
[ [5], [6], [5], [4], [7], [8] ],
[ [5], [7], [7], [9], [2], [1] ],
[ [5], [8], [5], [3], [8], [4] ]
])
input_mat = input_mat.reshape((1, 6, 6, 1))
我们将在其中使用自定义过滤器的虚拟 conv 模型
def build_model():
input_tensor = Input(shape=(6,6,1))
x = layers.Conv2D(1, kernel_size = 3,
kernel_initializer=my_filter,
strides=2, padding='valid') (input_tensor)
model = Model(inputs=input_tensor, outputs=x)
return model
测试
model = build_model()
out = model.predict(input_mat)
print(out)
输出
[[[[ 0.]
[-4.]]
[[-5.]
[ 3.]]]]
推荐阅读
- node.js - Puppeteer 没有点击带有文本的按钮
- javascript - 如何在同一页面内将值从 Js 传递到 PHP
- docker - 第二个node.js无法连接到docker compose中的mysql
- javascript - 系统未在角度 13 中使用动态导入定义
- css - Blazor 根据请求路径设置 CSS 文件
- c# - 如何使用 gmail API 的查询?设置属性 Q 似乎没有效果
- google-maps - 如何以编程方式编辑在 maps.google.com 上创建的现有地图上的图层名称?
- python - Pandas - 更改小于 n 个后续值相等的行
- python - 将 ray 与 django 集成没有达到相同的性能
- python - 如何让乌龟停止离开屏幕