如何在返回的新网络中加载经过训练的网络的某些层的权重?

帕特里克·冯·普拉登

我在文件夹path / to / modelFile中具有以下网络的经过训练的权重:

network={
"conv_1" : {"class": "conv", "filter_size": (400,), "activation":"abs" , "padding": "valid", "strides": 10, "n_out": 64 },
"pad_conv_1_time_dim" : {"class": "pad", "axes": "time", "padding": 20, "from": ["conv_1"]},
"conv_2" : {"class": "conv", "input_add_feature_dim": True, "filter_size": (40, 64), "activation":"abs", "padding": "valid","strides": 16, "n_out": 128, "from": ["pad_conv_1_time_dim"]},
"flatten_conv": {"class": "merge_dims", "axes": "except_time","n_out": 128,  "from": ["conv_2"]},
"window_1": {"class": "window", "window_size": 17, "from": ["flatten_conv"]},
"flatten_window": {"class": "merge_dims", "axes":"except_time","from": ["window_1"]},
"lin_1" :   { "class" : "linear", "activation": None, "n_out": 512,"from" : ["flatten_window"] },
"ff_2" :   { "class" : "linear", "activation": "relu", "n_out": 2000, "from" : ["lin_1"] },
"output" :   { "class" : "softmax", "loss" : "ce", "from" : ["ff_2"] }
}

我想将“ conv_1”和“ conv_2”层的训练好的权重加载到以下网络中:

network={
"conv_1" : {"class": "conv", "filter_size": (400,), "activation": "abs" , "padding": "valid", "strides": 10, "n_out": 64 },
"pad_conv_1_time_dim" : {"class": "pad", "axes": "time", "padding": 20, "from": ["conv_1"]},
"conv_2" : {"class": "conv", "input_add_feature_dim": True, "filter_size": (40, 64), "activation":"abs", "padding": "valid", "strides": 16, "n_out": 128, "from": ["pad_conv_1_time_dim"]},
"flatten_conv": {"class": "merge_dims", "axes": "except_time", "n_out": 128,  "from": ["conv_2"]},
"lstm1_fw" : { "class": "rec", "unit": "lstmp", "n_out" : rnnLayerNodes, "direction": 1, "from" : ['flatten_conv'] },
"lstm1_bw" : { "class": "rec", "unit": "lstmp", "n_out" : rnnLayerNodes, "direction": -1, "from" : ['flatten_conv'] },
"lin_1" :   { "class" : "linear", "activation": None, "n_out": 512, "from" : ["lstm1_fw", "lstm1_bw"] },
"ff_2" :   { "class" : "linear", "activation": "relu", "n_out": 2000, "from" : ["lin_1"] },
"ff_3" :   { "class" : "linear", "activation": "relu", "n_out": 2000,"from" : ["ff_2"] },
"ff_4" :   { "class" : "linear", "activation": "relu", "n_out": 2000,"from" : ["ff_3"] },
"output" :   { "class" : "softmax", "loss" : "ce", "from" : ["ff_4"] }
}

这怎么可能呢?

阿尔伯特

使用SubnetworkLayer是一个选项。看起来像:

trained_network_model_file = 'path/to/model_file'

trained_network = {
"conv_1" : {"class": "conv", "filter_size": (400,), "activation": "abs" , "padding": "valid", "strides": 10, "n_out": 64 },
"pad_conv_1_time_dim" : {"class": "pad", "axes": "time", "padding": 20, "from": ["conv_1"]},
"conv_2" : {"class": "conv", "input_add_feature_dim": True, "filter_size": (40, 64), "activation":"abs", "padding": "valid", "strides": 16, "n_out": 128, "from": ["pad_conv_1_time_dim"]},
"flatten_conv": {"class": "merge_dims", "axes": "except_time","n_out": 128,  "from": ["conv_2"]}
}

network = {
"conv_layers" : { "class" : "subnetwork", "subnetwork": trained_network, "load_on_init": trained_network_model_file, "n_out": 128},
"lstm1_fw" : { "class": "rec", "unit": "lstmp", "n_out" : rnnLayerNodes, "direction": 1, "from" : ['conv_layers'] },
"lstm1_bw" : { "class": "rec", "unit": "lstmp", "n_out" : rnnLayerNodes, "direction": -1, "from" : ['conv_layers'] },
"lin_1" :   { "class" : "linear", "activation": None, "n_out": 512, "from" : ["lstm1_fw", "lstm1_bw"] },
"ff_2" :   { "class" : "linear", "activation": "relu", "n_out": 2000, "from" : ["lin_1"] },
"ff_3" :   { "class" : "linear", "activation": "relu", "n_out": 2000, "from" : ["ff_2"] },
"ff_4" :   { "class" : "linear", "activation": "relu", "n_out": 2000, "from" : ["ff_3"] },
"output" :   { "class" : "softmax", "loss" : "ce", "from" : ["ff_4"] }
}

我认为这将是您的首选。

否则,custom_param_importer每个图层都有该选项,您可能会使其与之配合使用。

然后,对于许多层,您可以定义参数的初始化程序,例如ConvLayer,可以使用forward_weights_init像有功能load_txt_file_initializer可以使用,或者也许应该加入类似的功能直接从TF检查点文件加载。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用TensorFlow在Returnn中加载经过训练的网络的权重

如何在 Django 中加载经过训练的模型

如何在 pytorch 中的修改后的 vgg19 网络中加载预训练权重?

如何在不增加网络负担的情况下保存经过训练的图像

从经过训练的卷积网络进行预测

如何加载经过训练的 RandomForestClassificationModel 模型?

如何在不初始化权重的情况下导入经过训练的模型

Tensorflow:如何将Tensor馈送到经过训练的神经网络?

如何使用经过训练的神经网络(Tensorflow 2.0,回归分析)预测新数据?

如何将经过训练的网络用作另一个网络keras中的分支?

如何加载经过训练的模型以推断预测数据

如何在pytesseract中使用经过训练的数据?

经过训练的神经网络为所有评估行输出相同的结果

了解经过训练的神经网络内存使用情况

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

是否可以使用经过训练的分类神经网络来生成数据?

经过训练的元图的权重和偏差

如何获得经过训练的CNN模型某一层的输出[Tensorflow]

仅使用预先训练的火炬网络的某些层

加载经过训练的Keras模型并继续训练

Tensorflow:在将图扩展到新的最终层后,如何恢复Inception v3预训练的网络权重

如何在神经网络的隐藏层中的权重矩阵列上实现正交约束?

将经过训练的神经网络拆分为 2 部分并使用后一部分

如何使用 yolov5 colab 文件中导出的“best.pt”文件在本地运行经过训练的权重?

如何在不同分辨率下使用经过训练的深度学习模型?

Spark-如何在生产中使用经过训练的推荐器模型?

我们如何在移动设备上部署经过训练的张量流模型?

如何在Julia中访问经过训练的神经ODE参数?

TensorFlowJs | 如何在两个经过训练的模型之间获取模型增量