gpt4 book ai didi

python - 初始化经过训练的 keras 网络的单层并获得预测

转载 作者:行者123 更新时间:2023-12-01 08:26:50 24 4
gpt4 key购买 nike

我想“损坏”经过训练的 keras 网络的层,看看对这一层的损坏如何影响网络的性能。所以基本上我想:

1)加载训练好的网络

2)调用目标层并初始化其权重,将其放回网络内部

3)计算网络精度

我在 Google Colab 的 Keras 中使用 DenseNet201 模型和 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 (most recent call >last) in ()----> 1 model.layers[conv1/conv].set_weights( >keras.initializers.RandomNormal(mean=0.0, stddev=0.05, seed=None))

NameError: name 'conv1' is not defined

最佳答案

我看到的三个问题:

  1. 使用model.get_layer(layer_name)而不是model.layers[layer_name]
  2. conv1/conv 周围加上引号,就像 'conv1/conv' 一样,使其成为字符串(图层名称)。您收到错误是因为没有引号的 conv1conv 被视为变量(或任何其他 Python 对象),但您在这里需要一个字符串。
  3. layers.set_weights expects a list of numpy array ,但你向它传递一个 RandomNormal 对象。您可以使用[np.random.normal(loc=0.0, scale=0.05, size=proper_shape)]相反(请注意 [],它必须是一个列表),您必须通过 proper_shape = model.get_layer('conv1/conv' 确定图层权重矩阵的正确形状).get_weights()[0].shape 首先。

关于python - 初始化经过训练的 keras 网络的单层并获得预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54181983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com