【代码】
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
class Conv2D(tf.keras.layers.Layer):
def __init__(self, kernel_size, step_len, kernel):
super().__init__()
self.kernel_size = kernel_size # 卷积核大小
self.step_len = step_len # 步长,但此处并未在卷积中实际使用
self.kernel = np.array(kernel) # 确保kernel是numpy数组
def call(self, inputs):
new_image = []
for i in range(0, inputs.shape[0] - self.kernel_size[0] + 1, self.step_len): # 修正步长逻辑
print(i, inputs.shape[0])
Line_data = []
for j in range(0, inputs.shape[1] - self.kernel_size[1] + 1, self.step_len): # 同样修正步长逻辑
# 使用numpy的dot函数或np.sum(inputs[...]*self.kernel)代替np.mean
# 因为卷积通常使用加权和而不是平均值
conv_result = np.sum(inputs[i:i+self.kernel_size[0], j:j+self.kernel_size[1]] *