Цель состоит в том, чтобы использовать настройку веса на первом слое модели, чтобы полностью заполнить функцию фильтра верхних частот - сделать первый слой модели таким же, как фильтр верхних частот для изображения.
1. Во-первых, подобное решение будет таким: использование фильтра верхних частот при обработке изображения, создание нового изображения и использование его в модели.--- для этого нужно использовать обработку изображения, которая стоит времени.
2. Я хочу установить слой Conv2D, который также может передавать изображение с высокой скоростью.с пользовательским фильтром (в качестве инициализатора).Основным является то, что фильтр и conv2D используют правила свертки.
, но результаты отличаются от первого решения.
#The image processing code:
kernel55 = np.array([[-1, 2, -2, 2, -1],
[2, -6, 8, -6, 2],
[-2, 8, -12, 8, -2],
[2,-6, 8, -6, 2],
[-1, 2, -2, 2, -1]])/12
# load the image, pre-process it, and store it in the data list
image = cv2.imread('1.pgm',-1)
image = ndimage.convolve(image, kernel55)
print(image)
#the first layer of the Model:
def kernel_init(shape):
kernel = np.zeros(shape)
kernel[:,:,0,0] = np.array([[-1, 2, -2, 2, -1],
[2, -6, 8, -6, 2],
[-2, 8, -12, 8, -2],
[2,-6, 8, -6, 2],
[-1, 2, -2, 2, -1]])/12
return kernel
#Build Keras model
model = Sequential()
model.add(Conv2D(1, [5,5], kernel_initializer=kernel_init,
input_shape=(256,256,1), padding="same",activation='relu'))
model.build()
test_im=cv2.imread('1.pgm',-1) # define a test image
test_im=np.expand_dims(np.expand_dims(np.array(test_im),2),0)
out = model.predict(test_im)
Проблема в том, что использование обработки изображений позволяет получить правильное изображение с высокой скоростью передачи, но использование Conv2D - не тот же результат.
Я предполагаю, что два результата должны быть одинаковыми или похожими, но получается, что нет ...
Почему, и есть ли какие-либо проблемы с моими мыслями?