Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我们能否改变keras中经过训练的神经网络结构(.json或.h5文件)及其权重(.h5文件)?_Python_Json_Tensorflow_Keras - Fatal编程技术网

Python 我们能否改变keras中经过训练的神经网络结构(.json或.h5文件)及其权重(.h5文件)?

Python 我们能否改变keras中经过训练的神经网络结构(.json或.h5文件)及其权重(.h5文件)?,python,json,tensorflow,keras,Python,Json,Tensorflow,Keras,训练神经网络并将其保存为特定格式后,请使用.h5或.json格式。假设我想使用网络进行推理,但没有层say批处理规范化,我可以只从model file.h5或json中删除这一层并进行推理吗 这是否可能改变网络并进行推断?如果是,怎么做?一种方法,它为不同类型的模型编辑提供了很大的自由度,但不幸的是相当麻烦: 通过调用 temp\u config=my\u model.get\u config 临时权重=我的模型。获取权重 分析要更改或删除的临时配置中的哪一层 更改temp_配置并相应更改tem

训练神经网络并将其保存为特定格式后,请使用.h5或.json格式。假设我想使用网络进行推理,但没有层say批处理规范化,我可以只从model file.h5或json中删除这一层并进行推理吗


这是否可能改变网络并进行推断?如果是,怎么做?

一种方法,它为不同类型的模型编辑提供了很大的自由度,但不幸的是相当麻烦:

通过调用

temp\u config=my\u model.get\u config

临时权重=我的模型。获取权重

分析要更改或删除的临时配置中的哪一层

更改temp_配置并相应更改temp_权重。不幸的是,为每一层找到正确的权重可能会非常混乱,因为权重只是相互附加,常常以权重、偏差、权重、偏差、权重、偏差等流结束。。。。在您的情况下,将删除一个层,并删除该层的相应权重

然后使用新的配置和权重构建模型

新建\模型=模型。从\配置新建\配置

新建\模型。设置\权重新建\权重


是的,这实际上很简单:您需要使用参数命名所有层,并使用model.save_weights保存权重,并使用共享部分层的所需体系结构构建另一个模型。然后您可以使用新的\u model.load\u weights…,按\u name=True仅加载共享层。以下是一个例子:

input = Input(..., name='image_in')
conv1 = Conv2D(..., name='conv2d')(input)
normed = BatchNormalization(...)(conv1)
out = Flatten()(normed)
out = Dense(num_classes, activation='softmax', name='final_dense')(out)
model = Model(input, out)
# ... train etc
model.save_weights(model_file)
然后,您可以创建另一个模型,并对要共享的图层使用相同的名称:

input = Input(..., name='image_in')
conv1 = Conv2D(..., name='conv2d')(input) # reuse conv2d
out = Flatten()(conv1) # we got rid of batch
out = Dense(num_classes, activation='softmax', name='final_dense')(out) # reuse final_dense
new_model = Model(input, out)
# ... now load
new_model.load_weights(model_file, by_name=True)
设置by_name=True仅将具有匹配名称的层加载到所需的任何体系结构中