初始化训练好的keras网络的单层并得到预测

2024-09-25 04:32:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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

1)负荷训练网络

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

3)计算网络精度

我使用DenseNet201模型在Keras在谷歌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))

所以,我打印出图层的名称,然后将这些名称精确地输入到集合权重中,但是每次我都会得到这个名称错误

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


Tags: fromimport网络名称nonemodelmodelslayers
1条回答
网友
1楼 · 发布于 2024-09-25 04:32:52

我认为有三个问题:

  1. 使用model.get_layer(layer_name)代替model.layers[layer_name]。在
  2. conv1/conv周围加上引号,像这样'conv1/conv'使其成为一个字符串(层的名称)。之所以会出现错误,是因为不带引号的conv1和{}被视为变量(或任何其他python对象),但这里需要一个字符串。在
  3. layers.set_weightsexpects a list of numpy array,但您传递给它一个RandomNormal对象。您可以使用^{}(注意[],它必须是一个列表),在这里您必须首先通过proper_shape = model.get_layer('conv1/conv').get_weights()[0].shape来确定层权重矩阵的正确形状。在

相关问题 更多 >