当前位置: 首页 > 知识库问答 >
问题:

获取由 TensorFlow 训练的模型中某些权重的值

卜昂熙
2023-03-14

我已经用TensorFlow训练了一个ConvNet模型,我想在层中获得一个特定的权重。例如,在torch7中,我只需访问model.modules[2]weights。以获取第 2 层的权重。如何在TensorFlow中做同样的事情?

共有3个答案

轩辕涵亮
2023-03-14

因此,如果您逐步执行此代码,您将首先获得已使用/可训练变量的列表。然后,您可以在列表中对它们进行排序,在该列表中,您将权重矩阵/列表排序为变量名称,例如,如何处理该信息。

vars = tf.trainable_variables()
print(vars) #some infos about variables...
vars_vals = sess.run(vars)
for var, val in zip(vars, vars_vals):
    print("var: {}, value: {}".format(var.name, val)) #...or sort it in a list....
徐茂材
2023-03-14

2.0兼容回答:如果我们使用< code>Keras Sequential API构建模型,我们可以使用下面提到的代码获得模型的权重:

!pip install tensorflow==2.1

from tf.keras import Sequential

model = Sequential()

model.add(Conv2D(filters=conv1_fmaps, kernel_size=conv1_ksize,
                         strides=conv1_stride, padding=conv1_pad,
                         activation=tf.nn.relu, input_shape=(height, width, channels),
                    data_format='channels_last'))

model.add(MaxPool2D(pool_size = (2,2), strides= (2,2), padding="VALID"))

model.add(Dropout(0.25))

model.add(Flatten())

model.add(Dense(units = 32, activation = 'relu'))

model.add(Dense(units = 10, activation = 'softmax'))

model.summary()

print(model.trainable_variables) 

最后一条语句< code > print(Model . trainiable _ variables)将返回模型的权重,如下所示:

    [<tf.Variable 'conv2d/kernel:0' shape=(3, 3, 1, 32) dtype=float32>,
 <tf.Variable 'conv2d/bias:0' shape=(32,) dtype=float32>, <tf.Variable 
'dense/kernel:0' shape=(6272, 32) dtype=float32>, <tf.Variable 'dense/bias:0' 
shape=(32,) dtype=float32>, <tf.Variable 'dense_1/kernel:0' shape=(32, 10) 
dtype=float32>, <tf.Variable 'dense_1/bias:0' shape=(10,) dtype=float32>]
柴深
2023-03-14

在TensorFlow中,训练的权重由< code>tf表示。可变对象。如果您创建了一个< code>tf。变量—例如,称为< code > v —您可以通过调用< code>sess.run(v)(其中< code>sess是< code>tf)以NumPy数组的形式获取其值。会话)。

如果当前没有指向< code>tf的指针。变量,您可以通过调用< code > TF . trainiable _ variables()获得当前图形中可训练变量的列表。此函数返回所有可训练的< code>tf列表。变量对象,您可以通过匹配< code>v.name属性来选择所需的对象。例如:

# Desired variable is called "tower_2/filter:0".
var = [v for v in tf.trainable_variables() if v.name == "tower_2/filter:0"][0]
 类似资料:
  • 我使用的OpenNLP模型如下: 我想把我的数据附加到训练数据集中,这些模型就是在这个数据集中训练的。那么请告诉我从哪里可以得到原始数据集?

  • 因此,我在TensorFlow 2中使用tf.keras框架重新训练了一个预先训练的ResNet50 V2模型,在顶部添加了两个密集层。现在我想在基本ResNet模型中可视化层中的权重。但是,重新加载保存的模型 导致 如您所见,ResNet模型的层没有单独列出,这意味着调用 只会导致 因此,如何访问基本ResNet50 V2模型中每个层内部的权重?

  • 我可以在AWS Sagemaker中通过评估模型来训练多个模型train.py脚本,以及如何从多个模型中获取多个指标? 任何链接、文档或视频都很有用。

  • 在之前的描述中,我们通常把机器学习模型和训练算法当作黑箱子来处理。如果你实践过前几章的一些示例,你惊奇的发现你可以优化回归系统,改进数字图像的分类器,你甚至可以零基础搭建一个垃圾邮件的分类器,但是你却对它们内部的工作流程一无所知。事实上,许多场合你都不需要知道这些黑箱子的内部有什么,干了什么。 然而,如果你对其内部的工作流程有一定了解的话,当面对一个机器学习任务时候,这些理论可以帮助你快速的找到恰

  • 在之前的描述中,我们通常把机器学习模型和训练算法当作黑箱子来处理。如果你实践过前几章的一些示例,你惊奇的发现你可以优化回归系统,改进数字图像的分类器,你甚至可以零基础搭建一个垃圾邮件的分类器,但是你却对它们内部的工作流程一无所知。事实上,许多场合你都不需要知道这些黑箱子的内部有什么,干了什么。 然而,如果你对其内部的工作流程有一定了解的话,当面对一个机器学习任务时候,这些理论可以帮助你快速的找到恰

  • 有了能做出惊人预测的模型之后,要做什么呢?当然是部署生产了。这只要用模型运行一批数据就成,可能需要写一个脚本让模型每夜都跑着。但是,现实通常会更复杂。系统基础组件都可能需要这个模型用于实时数据,这种情况需要将模型包装成网络服务:这样的话,任何组件都可以通过 REST API 询问模型。随着时间的推移,你需要用新数据重新训练模型,更新生产版本。必须处理好模型版本,平稳地过渡到新版本,碰到问题的话需要