Tensorflow 如何使用具有批量归一化层的预训练keras模型?

Tensorflow 如何使用具有批量归一化层的预训练keras模型?,tensorflow,keras,Tensorflow,Keras,我有一个预训练模型和批处理归一化模型。当我跑步时: model.layers.get_weights sess.run(tf.report_uninitialized_variables(tf.global_variables())) 我可以看到,在batch_规范化层中存在beta/gama值,这意味着模型已经过训练,并且该值具有意义 我想加载模型并在tensorflow中使用它。当我跑步时: model.layers.get_weights sess.run(tf.report_uni

我有一个预训练模型和批处理归一化模型。当我跑步时:

model.layers.get_weights
sess.run(tf.report_uninitialized_variables(tf.global_variables()))
我可以看到,在batch_规范化层中存在beta/gama值,这意味着模型已经过训练,并且该值具有意义

我想加载模型并在tensorflow中使用它。当我跑步时:

model.layers.get_weights
sess.run(tf.report_uninitialized_variables(tf.global_variables()))
它为我提供了来自批处理规范化层的变量: 单位化变量

array(['pretrain_variable/pretrain_variable/batch_normalization_11/moving_mean/biased_1',
       'pretrain_variable/pretrain_variable/batch_normalization_11/moving_mean/local_step_1',
       'pretrain_variable/pretrain_variable/batch_normalization_11/moving_variance/biased_1',
       'pretrain_variable/pretrain_variable/batch_normalization_11/moving_variance/local_step_1',
       'pretrain_variable/pretrain_variable/batch_normalization_15/moving_mean/biased_1',
       'pretrain_variable/pretrain_variable/batch_normalization_15/moving_mean/local_step_1',
       'pretrain_variable/pretrain_variable/batch_normalization_15/moving_variance/biased_1',
       'pretrain_variable/pretrain_variable/batch_normalization_15/moving_variance/local_step_1',
       'pretrain_variable/pretrain_variable/batch_normalization_9/moving_mean/biased_1',
       'pretrain_variable/pretrain_variable/batch_normalization_9/moving_mean/local_step_1',
       'pretrain_variable/pretrain_variable/batch_normalization_9/moving_variance/biased_1',
       'pretrain_variable/pretrain_variable/batch_normalization_9/moving_variance/local_step_1',
       'pretrain_variable/pretrain_variable/batch_normalization_13/moving_mean/biased_1',
       'pretrain_variable/pretrain_variable/batch_normalization_13/moving_mean/local_step_1',
       'pretrain_variable/pretrain_variable/batch_normalization_13/moving_variance/biased_1',
       'pretrain_variable/pretrain_variable/batch_normalization_13/moving_variance/local_step_1',
       'pretrain_variable/pretrain_variable/batch_normalization_16/moving_mean/biased_1',
       'pretrain_variable/pretrain_variable/batch_normalization_16/moving_mean/local_step_1',
       'pretrain_variable/pretrain_variable/batch_normalization_16/moving_variance/biased_1',
       'pretrain_variable/pretrain_variable/batch_normalization_16/moving_variance/local_step_1',
       'pretrain_variable/pretrain_variable/batch_normalization_14/moving_mean/biased_1',
       'pretrain_variable/pretrain_variable/batch_normalization_14/moving_mean/local_step_1',
       'pretrain_variable/pretrain_variable/batch_normalization_14/moving_variance/biased_1',
       'pretrain_variable/pretrain_variable/batch_normalization_14/moving_variance/local_step_1',
       'pretrain_variable/pretrain_variable/batch_normalization_10/moving_mean/biased_1',
       'pretrain_variable/pretrain_variable/batch_normalization_10/moving_mean/local_step_1',
       'pretrain_variable/pretrain_variable/batch_normalization_10/moving_variance/biased_1',
       'pretrain_variable/pretrain_variable/batch_normalization_10/moving_variance/local_step_1',
       'pretrain_variable/pretrain_variable/batch_normalization_12/moving_mean/biased_1',
       'pretrain_variable/pretrain_variable/batch_normalization_12/moving_mean/local_step_1',
       'pretrain_variable/pretrain_variable/batch_normalization_12/moving_variance/biased_1',
       'pretrain_variable/pretrain_variable/batch_normalization_12/moving_variance/local_step_1',
       'train_variable/output_y_0/kernel',
       'train_variable/output_y_0/bias',
       'train_variable/output_y_1/kernel',
       'train_variable/output_y_1/bias',
       'train_variable/output_y_2/kernel',
       'train_variable/output_y_2/bias',
       'train_variable/output_y_3/kernel',
       'train_variable/output_y_3/bias',
       'train_variable/output_y_4/kernel',
       'train_variable/output_y_4/bias',
       'train_variable/output_y_5/kernel',
       'train_variable/output_y_5/bias',
       'train_variable/output_y_6/kernel',
       'train_variable/output_y_6/bias',
       'train_variable/output_y_7/kernel',
       'train_variable/output_y_7/bias',
       'train_variable/output_y_8/kernel',
       'train_variable/output_y_8/bias',
       'train_variable/output_y_9/kernel',
       'train_variable/output_y_9/bias',
       'train_variable/output_y_10/kernel',
       'train_variable/output_y_10/bias',
       'train_variable/output_y_11/kernel',
       'train_variable/output_y_11/bias', 'train_variable/beta1_power',
       'train_variable/beta2_power',
       'train_variable/train_variable/output_y_0/kernel/Adam',
       'train_variable/train_variable/output_y_0/kernel/Adam_1',
       'train_variable/train_variable/output_y_0/bias/Adam',
       'train_variable/train_variable/output_y_0/bias/Adam_1',
       'train_variable/train_variable/output_y_1/kernel/Adam',
       'train_variable/train_variable/output_y_1/kernel/Adam_1',
       'train_variable/train_variable/output_y_1/bias/Adam',
       'train_variable/train_variable/output_y_1/bias/Adam_1',
       'train_variable/train_variable/output_y_2/kernel/Adam',
       'train_variable/train_variable/output_y_2/kernel/Adam_1',
       'train_variable/train_variable/output_y_2/bias/Adam',
       'train_variable/train_variable/output_y_2/bias/Adam_1',
       'train_variable/train_variable/output_y_3/kernel/Adam',
       'train_variable/train_variable/output_y_3/kernel/Adam_1',
       'train_variable/train_variable/output_y_3/bias/Adam',
       'train_variable/train_variable/output_y_3/bias/Adam_1',
       'train_variable/train_variable/output_y_4/kernel/Adam',
       'train_variable/train_variable/output_y_4/kernel/Adam_1',
       'train_variable/train_variable/output_y_4/bias/Adam',
       'train_variable/train_variable/output_y_4/bias/Adam_1',
       'train_variable/train_variable/output_y_5/kernel/Adam',
       'train_variable/train_variable/output_y_5/kernel/Adam_1',
       'train_variable/train_variable/output_y_5/bias/Adam',
       'train_variable/train_variable/output_y_5/bias/Adam_1',
       'train_variable/train_variable/output_y_6/kernel/Adam',
       'train_variable/train_variable/output_y_6/kernel/Adam_1',
       'train_variable/train_variable/output_y_6/bias/Adam',
       'train_variable/train_variable/output_y_6/bias/Adam_1',
       'train_variable/train_variable/output_y_7/kernel/Adam',
       'train_variable/train_variable/output_y_7/kernel/Adam_1',
       'train_variable/train_variable/output_y_7/bias/Adam',
       'train_variable/train_variable/output_y_7/bias/Adam_1',
       'train_variable/train_variable/output_y_8/kernel/Adam',
       'train_variable/train_variable/output_y_8/kernel/Adam_1',
       'train_variable/train_variable/output_y_8/bias/Adam',
       'train_variable/train_variable/output_y_8/bias/Adam_1',
       'train_variable/train_variable/output_y_9/kernel/Adam',
       'train_variable/train_variable/output_y_9/kernel/Adam_1',
       'train_variable/train_variable/output_y_9/bias/Adam',
       'train_variable/train_variable/output_y_9/bias/Adam_1',
       'train_variable/train_variable/output_y_10/kernel/Adam',
       'train_variable/train_variable/output_y_10/kernel/Adam_1',
       'train_variable/train_variable/output_y_10/bias/Adam',
       'train_variable/train_variable/output_y_10/bias/Adam_1',
       'train_variable/train_variable/output_y_11/kernel/Adam',
       'train_variable/train_variable/output_y_11/kernel/Adam_1',
       'train_variable/train_variable/output_y_11/bias/Adam',
       'train_variable/train_variable/output_y_11/bias/Adam_1'],
      dtype=object)
为了使用这个模型,我必须运行这个代码。我担心这会破坏batch_规范化层中的参数。但是,我验证了参数保持不变。
所以,我的问题是,为什么batch_规范化层中的参数会被报告为未初始化,但在sess.run(tf.variables_initializer)之后保持不变

在训练模型之前,这些参数可以初始化,因此会有beta、gamma值。默认情况下,gamma将初始化为1,beta将初始化为0

pretrain_model.layers[5].get_weights()[0]数组([0.96893185,0.95561063,1.1053786,0.93354714,0.9943648,…]在sess.run(tf.variables_初始值设定项([v代表tf.global_variables(),如果v.name.split(“:”)[0]代表单位化的_变量))之后保持不变。在tf.variables\u初始值设定项之后,gamma值没有改变。@XiangLv这很有趣。您介意重复一下您试图实现的目标吗?我正在做一些类似转移学习的事情。因此,我训练了一个keras模型(conv+批处理\u规范化+池化)首先,将其保存为h5文件。我提取了它的中间输出。我正在进行多任务学习,需要将几个任务的损失相加。因此,我下面的层和优化器是使用tensorflow构建的。在sess.run(train)之前,我必须运行(tf.variable\u initializer).所以,我收集了单位化变量,发现其中包含批量归一化/移动平均值/移动方差变量。我认为这是非常误导的,因为之前我认为我的预训练模型被破坏了。