Я следую за разделом «Извлечение объектов из произвольного промежуточного слоя с помощью VGG19» в Keras: Applications . Я могу получить input: input_1 и свертку первого слоя: вес и смещение block1_conv1 и вывод слоя.
from keras.applications.vgg16 import VGG16
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input, decode_predictions
from keras.models import Model
import numpy as np
base_model = VGG16(weights='imagenet')
model = Model(inputs=base_model.input, outputs=base_model.get_layer('block1_conv1').output)
model.summary()
# Get weight and bias of block1_conv1
block1_conv1 = model.get_layer("block1_conv1")
weight, bias = block1_conv1.get_weights()
print("weight dtype:{}, shape:{}".format(weight.dtype, weight.shape))
print("bias length:{}".format(len(bias)))
# Get the image input
img_path = 'elephant.jpg'
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
# Get the output of block1_conv1
block1_conv1_features = model.predict(x)
print(block1_conv1_features.size, block1_conv1_features.shape)
print(block1_conv1_features[0][0][0][:5])
Теперь я хочу создать Conv2D (keras.layers import Conv2D) из keras .layers, установите один и тот же вход: x и weight / bias и ожидайте, что он будет иметь одинаковый результат. Но я не знаю, как это сделать, может кто-нибудь дать мне какое-нибудь предложение? Большое спасибо.