Я хочу «повредить» слой обученной сети keras, чтобы увидеть, как повреждение этого единственного слоя влияет на производительность сети.
В общем, я хочу:
1) загруженная обученная сеть
2) вызвать целевой слой и инициализировать его веса, вернуть его обратно в сеть
3) рассчитать точность сети
Я использую модель DenseNet201 в Keras в Google Colab с бэкэндом TensorFlow
import tensorflow as tf
import pandas as pd
import numpy as np
from keras.applications.densenet import DenseNet201
from keras.preprocessing import image
from keras.applications.inception_v3 import preprocess_input, decode_predictions
from keras.models import Model
from keras.callbacks import ReduceLROnPlateau, ModelCheckpoint
from keras.optimizers import Adam, SGD
from google.colab import drive
drive.mount('/content/gdrive')
from keras.models import load_model
model=load_model('/content/gdrive/My Drive/dense.h5')
adam = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=True)
model.compile(optimizer=adam, loss='binary_crossentropy', metrics=['accuracy'])
for layer in model.layers:
print(layer.name)
model.layers[conv1/conv].set_weights( keras.initializers.RandomNormal(mean=0.0, stddev=0.05, seed=None))
Итак, я печатаю названия слоев, а затем вводю именно эти имена в set_weights, но каждый раз, когда я получаю эту NameError
NameError Traceback (последний вызов> последний)
в ()
----> 1 model.layers [conv1 / conv] .set_weights (> keras.initializers.RandomNormal (среднее значение = 0,0, стандартное отклонение = 0,05, начальное число = нет))
NameError: имя 'conv1' не определено