Python 如何解决重新启动tensorflow训练过程时f1值下降的问题?

Python 如何解决重新启动tensorflow训练过程时f1值下降的问题?,python,tensorflow,Python,Tensorflow,我使用tensorflow来训练分类问题的模型。当我停止培训过程并再次重新启动时,培训的f1值会快速下降,然后上升。我不知道这种情况是否会影响我的模型的最终性能。我很难找到这个问题的答案,因为我使用了tensorflow的高级API,estimator 我的tensorflow版本是1.14.0,Python版本是2.7,我使用的是CentOS 7 以下是估计器API中要求的模型_fn的代码 def型号(功能、标签、模式、参数): “估计器的模型函数” ''' #特征,特征\u掩码=特征[0],

我使用tensorflow来训练分类问题的模型。当我停止培训过程并再次重新启动时,培训的
f1
值会快速下降,然后上升。我不知道这种情况是否会影响我的模型的最终性能。我很难找到这个问题的答案,因为我使用了tensorflow的高级API,estimator

我的tensorflow版本是1.14.0,Python版本是2.7,我使用的是CentOS 7

以下是估计器API中要求的模型_fn的代码

def型号(功能、标签、模式、参数):
“估计器的模型函数”
'''
#特征,特征\u掩码=特征[0],特征[1]
#提升值错误(features.shape)
网络类型=参数['network']
#网络类型=config.network
如果网络类型==“开始”:
net\u func=起始网络
损失\u func=ModelLoss.start\u损失
metric\u func=ConfigMetrics.start\u metrics
elif网络_类型==‘音高’:
net\u func=俯仰网络
损耗\u func=functools.partial(ModelLoss.pitch\u损耗\u加权速度,
速度权重=参数[‘速度权重’])
metric\u func=ConfigMetrics.pitch\u metrics
elif网络类型==“帧”:
net\u func=帧网络
loss\u func=ModelLoss.frame\u loss
metric\u func=ConfigMetrics.frame\u metrics
elif网络类型==“联合”:
net\u func=联合网络
loss\u func=ModelLoss.model\u loss
metric\u func=ConfigMetrics.model\u metrics
logits=net_func(特征,(mode==tf.estimator.ModeKeys.TRAIN),True)
#预测部分
probs=tf.nn.sigmoid(logits)
预测={
“probs”:probs,
}
#从特定模型文件路径还原参数。
restore\u hook=RestoreHook(参数['weight\u path'],['global\u step'])
如果参数['weight_path']:
#从两个模型恢复参数--起始和起始\u俯仰和帧
模型_路径=[x代表参数['weight_path']中的x。如果len(x)!=0,则拆分(',')
如果len(模型路径)>=2:
tf.train.init\u from\u检查点(模型路径[0],
{'start/':'start/'})
tf.train.init_from_checkpoint(模型_路径[1],
{'pitch/':'pitch/'})
如果len(model_路径)==3:
tf.train.init\u from\u checkpoint(模型路径[2],
{'frame/':'frame/'})
如果mode==tf.estimator.ModeKeys.PREDICT:
返回tf.estimator.EstimatorSpec(模式=模式,预测=预测,
预测挂钩=[恢复挂钩])
#火车部分
loss=loss\u func(标签、登录)+ModelLoss.regu loss()
如果模式==tf.estimator.ModeKeys.TRAIN:
全局\u步骤=tf.train.get\u或\u create\u全局\u步骤()
lr=参数[“初始学习率”]
#使用谷歌学习率设置
列车运行=tf.contrib.layers.optimize\u损耗(
name='training',
损失=损失,
全局步=全局步,
学习率=lr,
学习率衰减率fn=functools.partial(tf.train.exponential衰减,衰减步长=20000,衰减率=0.98,阶梯=True),
clip_渐变=3.0,
优化器(Adam)
其他:
列车运行=无
#评价部分
度量=度量函数(标签、预测['probs'])
返回tf.estimator.estimator规范(
模式=模式,预测=预测,损失=损失,列车运行=列车运行,
评估度量操作=度量,
训练钩=[恢复钩],
评估挂钩=[恢复挂钩])
等级恢复挂钩(tf.train.SessionRunHook):
''钩子用于从保存的模型恢复参数。
对于估计器,如果我们想从
保存的模型是我们自己指定的,我们应该使用这个
小提尔克。
用法:
在模型函数的返回值tf.estimator.estimator Spec中,
添加训练挂钩=[RestoreHook(权重路径,['global\u step'])]
'''
定义初始(自身、权重路径、排除):
''准备保存的模式路径和不会恢复的变量列表
Args:
权重路径:str,模型文件路径。它可以包含一个或多个模型。
排除:列表,不恢复的变量列表。
'''
如果权重为U路径:
self.model_path=[x代表权重中的x_path.split(','),如果len(x)!=0]
self.var\u list=tf.contrib.framework.get\u variables\u to\u restore(
排除=排除)
如果len(自模型_路径)==1:
self.init\u fn=tf.contrib.framework.assign\u from\u checkpoint\u fn(
self.model\u路径[0],self.var\u列表,忽略\u缺少\u vars=True)
其他:
self.init_fn=无
其他:
self.init_fn=无
创建会话后定义(self、session、coord=None):
如果session.run(tf.train.get_或_create_global_step())==0:
如果self.init_fn:
self.init_fn(会话)
以下是显示情况的图片:
整个模型代码非常大,因此我无法提供重新实现这种情况的代码。

欢迎使用StackOverflow。一般来说,你应该避免发布代码的链接-在提问之前尽量将问题归结为一个问题,并使用,而不是作为链接将该代码包含在你的答案中。欢迎使用StackOverflow。一般来说,你应该避免发布代码的链接——在提问之前,尽量将问题归结为一个问题,并使用,而不是作为链接,将该代码包含在你的答案中。