- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 Tensorflow 从 GAN 保存生成器模型。我正在使用的模型有几个批量归一化层。当我保存权重时,只有运行全局变量初始值设定项才能成功恢复它们,但我不必这样做,因为所有变量都正在恢复。如果我在恢复之前运行全局变量初始值设定项,当我使用加载的权重运行推理并为批规范参数设置 is_training=False 时,模型的性能会非常差。但是,如果 is_training=True,则模型将按预期执行。这种行为应该完全相反。
为了节省权重,我这样做:
t_vars = tf.trainable_variables()
g_vars = [var for var in t_vars if 'g_' in var.name]
g_saver = tf.train.Saver(g_vars)
... train model ...
g_saver.save(sess, "weights/generator/gen.ckpt")
当我恢复权重时,我使用相同的模型定义并执行以下操作:
t_vars = tf.trainable_variables()
g_vars = [var for var in t_vars if 'g_' in var.name]
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
g_saver = tf.train.Saver(g_vars)
g_saver.restore(sess, "./weights/generator/gen.ckpt")
您需要执行特殊程序来计算批处理标准权重吗?我是否缺少一些变量集合?
编辑:
我使用以下方法定义批量归一化层:
conv1_norm = tf.contrib.layers.batch_norm(conv1, is_training=training
我发现将variables_collections=["g_batch_norm_non_trainable"]添加到batch_norm函数中,然后执行
g_vars = list(set([var for var in t_vars if 'g_' in var.name] + tf.get_collection("g_batch_norm_non_trainable")))
有效,但是对于一个简单的减肥指令来说,这似乎相当复杂。
最佳答案
当您使用 tf.contrib.layers.batch_norm 定义批量标准化时使用默认参数(如您的情况所示),将创建三个变量:beta
、moving_mean
和 moving_variance
。第一个是唯一的可训练变量,其他两个包含在 tf.GraphKeys.GLOBAL_VARIABLES
集合中。
这就是为什么使用以下行中的可训练变量定义的 g_vars
不会同时在列表中获得 moving_mean
和 moving_variance
:
g_vars = [var for var in t_vars if 'g_' in var.name]
由于您似乎只想保存生成器变量,因此我建议使用变量范围来定义生成器网络。
对随机张量进行上采样并使用批量归一化的示例:
import tensorflow as tf
import numpy as np
input_layer = tf.placeholder(tf.float32, (2, 7, 7, 64)) # (batch, height, width, in_channels)
with tf.variable_scope('generator', reuse=tf.AUTO_REUSE):
# define your generator network here ...
t_conv_layer = tf.layers.conv2d_transpose(input_layer,
filters=32, kernel_size=[3, 3], strides=(2, 2), padding='SAME', name='t_conv_layer')
batch_norm = tf.contrib.layers.batch_norm(t_conv_layer, is_training=True, scope='my_batch_norm')
print(batch_norm) # Tensor("generator/my_batch_norm/FusedBatchNorm:0", shape=(2, 14, 14, 32), dtype=float32)
您可以通过打印来检查 tf.trainable_variables()
和 tf.global_variables()
的变量列表。由于可训练变量位于全局变量列表中,如所述 here ,我们可以将 g_vars
定义为:
g_vars = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope='generator')
如果我们检查此列表,我们将拥有我们想要的批量标准化的所有变量:
for var in g_vars:
print("variable_name: {:45}, nb_parameters: {}".format(var.name, np.prod(var.get_shape().as_list())))
产生输出:
variable_name: generator/t_conv_layer/kernel:0 , nb_parameters: 18432
variable_name: generator/t_conv_layer/bias:0 , nb_parameters: 32
variable_name: generator/my_batch_norm/beta:0 , nb_parameters: 32
variable_name: generator/my_batch_norm/moving_mean:0 , nb_parameters: 32
variable_name: generator/my_batch_norm/moving_variance:0 , nb_parameters: 32
关于python - 保存使用 BatchNorm 的 Tensorflow 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54186376/
BatchNormalization 和 TimeDistributed(BatchNormalization) 是否对顺序数据(例如视频)有相同的影响?如果不是有什么区别? 最佳答案 在 tf.ke
我正在尝试将预训练的 BN 权重从 pytorch 模型复制到其等效的 Keras 模型,但我不断得到不同的输出。 我阅读了 Keras 和 Pytorch BN 文档,我认为区别在于它们计算“均值”
我有两种类型的灰度图像,比如汽车和飞机。在我的训练集中,我有 1000 张图像(大约 50/50 分割)。在这个训练集中,我所有的飞机示例都在白色背景上,而所有汽车示例都在黑色背景上(这是故意的,模型
我正在训练一个 CNN,为了调试我的问题,我正在研究实际训练数据的一小部分。 在训练期间,损失和准确性似乎非常合理且相当不错。 (在示例中我使用了相同的小子集进行验证,问题已经在这里显示了) 适合 x
我有这些 Backprop 更新,请让我知道 dx 部分哪里出了问题。在计算图中,我使用X、sample_mean 和sample_var。感谢您的帮助 (x, norm, sample_mean,
我对如何使用/插入"BatchNorm"有点困惑我的模型中的图层。 我看到了几种不同的方法,例如: ResNets : "BatchNorm"+"Scale" (无参数共享) “BatchNorm”
我想弄清楚 Keras 中的批量归一化究竟做了什么。现在我有以下代码。 for i in range(8): c = Convolution2D(128, 3, 3, border_mode
我正在尝试将批量规范添加到 Keras 中的 vgg 样式模型。当我添加 batch norm 层时,出现错误: FailedPreconditionError: Attempting to use
keras BatchNormalization layer使用 axis=-1 作为默认值,并说明特征轴通常是归一化的。为什么会这样? 我想这很令人惊讶,因为我更熟悉使用类似 StandardSca
是 batchnorm momentum convention (默认值=0.1)与其他库一样正确,例如Tensorflow 好像一般默认是 0.9 或者 0.99?或者也许我们只是使用了不同的约定?
在 Keras 中实现 Residual Network 时出现错误。下面是给我错误的代码(错误来自函数定义最后一步的第一行): 加载包: import numpy as np from keras
我正在尝试保存模型,然后稍后加载它以进行一些预测;发生的事情是训练后模型的准确率是95%+ ,但是当我保存它然后加载它时,准确度下降到接近 10%在 同 数据集。 要重现此错误结果,您可以运行 thi
我有以下代码。 x = keras.layers.Input(batch_shape = (None, 4096)) hidden = keras.layers.Dense(512, activati
我正在通过时间序列数据训练 LSTM 网络,并希望对数据进行标准化,因为我的特征具有不同的规模。 我的数据形状是 (n_samples x n_timestamps x n_features) 我想使
我目前正在学习在我的项目中使用 Tensorflow-2.0。我想使用卷积神经网络(CNN)完成一个语义分割任务,在编码时发现一个奇怪的错误。 首先,构建了一个简单的模型并且运行良好。 X_train
我的问题是 BatchNormalization (BN) 正在标准化什么。 我问,BN 是单独对每个像素的 channel 进行归一化,还是对所有像素一起归一化。它是在每个图像的基础上还是在整个批处
我的 LSTM 网络有 5 个输入。第一个输入的典型值为 1000 到 3000。其余输入的值为 -1 到 1。 我想插入 BatchNormalization 作为第一层。但输入 2-5 已经在 -
inputs = Input((img_height, img_width, img_ch)) conv1 = Conv2D(n_filters, (k, k), padding=padding)(i
我正在尝试使用 Tensorflow 从 GAN 保存生成器模型。我正在使用的模型有几个批量归一化层。当我保存权重时,只有运行全局变量初始值设定项才能成功恢复它们,但我不必这样做,因为所有变量都正在恢
过了一段时间我又回到了tensorflow,看起来情况已经完全改变了。 但是,之前我曾经在训练循环中使用 tf.contrib....batch_normalization 并进行以下操作: upda
我是一名优秀的程序员,十分优秀!