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

具有分段常数函数的张量流误差中的学习率衰减

马权
2023-03-14

我正在尝试使用Tiny YOLO v2的代码库。我在声明学习率计划时遇到以下错误。我可以看到我的step值与我的lr值大小相同,但我不确定什么是好的修复方法。我已经包括了明确声明值的尝试(使用步骤小于lr)以及导致的错误。

错误:

回溯(最后一次调用):文件“scripts/train\u tiny\u yolo.py”,第335行,在lr=tf中。火车分段常数(全局步长、步长、lrs)文件“/Users/nivedithakalavakonda/Desktop/python\u environments/objectdet\u tf1/lib/python3.6/site packages/tensorflow/python/training/learning\u rate\u decation.py”,第147行,分段常数名称=名称)文件“/Users/nivedithakalavakonda/Desktop/python\u environments/objectdet\u tf1/lib/python3。6/站点包/tensorflow/python/training/learning\u rate\u decay\u v2。py”,第166行,分段_常量“边界长度应比值的长度小1”)值错误:边界长度应比值的长度小1

以下是我的代码中的相关部分:

    base_lr = params.get('learning_rate', 1e-3)
    steps = params.get('steps', [3000, 4000, 5000])

    steps_and_lrs = []
    if steps[0] > 100:
        # Warm-up
        steps_and_lrs += [
            (25, base_lr / 100),
            (50, base_lr / 10)
        ]

    steps_and_lrs += [(step, base_lr * 10**(-i)) for i, step in enumerate(steps)]
    steps, lrs = zip(*steps_and_lrs)

    # Alternative attempt to explicitly declare lr and steps values
    # steps =( 50, 20000, 30000, 40000)
    # lrs = (1e-05, 0.0001, 0.001, 0.0001, 1e-05)

    max_iter = steps[-1]
    lr = tf.train.piecewise_constant(global_step, steps, lrs)
    np.set_printoptions(precision=3, suppress=True)

    opt = tf.train.MomentumOptimizer(lr, momentum=0.9)
    grads_and_vars = opt.compute_gradients(loss)
    clip_value = params.get('clip_gradients')

    if clip_value is not None:
        grads_and_vars = [(tf.clip_by_value(g, -clip_value, clip_value), v) for g, v in grads_and_vars]

    train_op = opt.apply_gradients(grads_and_vars,
            global_step=global_step)

    merged = tf.summary.merge_all()

我尝试过什么:

当我明确给出步骤和lr的值时,我得到以下值错误:

回溯(最后一次调用):文件“scripts/train_tiny_yolo.py”,第363行,在grads_和_vars=[(tf.clip_by_value(g,-clip_value,clip_value),v)用于g,v用于grads_和_vars]文件“scripts/train_tiny_yolo.py”,第363行,在grads_和_vars=[(tf.clip_by_value(g,-,-clip_value,clip_value,clip_value),v)用于g,v用于grads_和_vars]文件“/Users/nivedithakalavakonda/Desktop/python\u environments/objectdet\u tf1/lib/python3。6/站点包/tensorflow/python/util/dispatch。py“,第180行,在包装器返回目标(*args,**kwargs)文件“/Users/nivedithakalavakonda/Desktop/python_环境/objectdet_tf1/lib/python3中。6/站点包/tensorflow/python/ops/clip_ops。py“,第69行,在clip_by_value t=ops.convert_to_tensor(t,name=“t”)文件“/Users/nivedithakalavakonda/Desktop/python_environments/objectdet_tf1/lib/python3中。6/站点包/tensorflow/python/framework/ops。py”,第1039行,在convert_to_tensor return convert_to_tensor_v2(值、数据类型、首选数据类型、名称)文件“/Users/nivedithakalavakonda/Desktop/python_environments/objectdet_tf1/lib/python3中。6/站点包/tensorflow/python/framework/ops。py”,第1097行,在convert_to_tensor_v2 as_ref=False)文件“/Users/nivedithakalavakonda/Desktop/python_environments/objectdet_tf1/lib/python3中。6/站点包/tensorflow/python/framework/ops。py”,第1175行,在内部文件“/Users/nivedithakalavakonda/Desktop/python\u environments/objectdet\u tf1/lib/python3”中。6/site packages/tensorflow/python/framework/constant_op.py”,第304行,在_constant_tensor_conversion_函数中返回常量(v,dtype=dtype,name=name)文件“/Users/nivedithakalavakonda/Desktop/python_environments/objectdet_tf1/lib/python3。6/site packages/tensorflow/python/framework/constant_op.py”,第245行,在常量allow_broadcast=True)文件“/Users/nivedithakalavakonda/Desktop/python_environments/objectdet_tf1/lib/python3中。6/site packages/tensorflow/python/framework/constant_op.py”,第283行,在文件“/Users/nivedithakalavakonda/Desktop/python_environments/objectdet_tf1/lib/python3中。6/站点包/tensorflow/python/framework/tensor\u util。py”,第454行,在make_tensor_proto Rase ValueError中(“不支持无值”)

目前使用TensorFlow 1.13.1。

任何帮助都很感激。如果分享大代码库会更有见地,请告诉我。


共有2个答案

阎丰羽
2023-03-14

我发现,当我确保步骤lrs大小不相同时,错误是由于梯度值中包含。我通过以下解决方法解决了这个问题:

    if grad is None:
        return grad
    return _tf.clip_by_value(grad, -clip_value, clip_value)

    if clip_value is not None:
            grads_and_vars = opt.compute_gradients(loss)
            clipped_gradients = [(ClipIfNotNone(g, clip_value), v) for g, v in grads_and_vars]
            train_op = opt.apply_gradients(clipped_gradients, global_step=global_step)
蒋浩
2023-03-14

根据您的代码,步骤lrs大小相同。请检查[此处]提供的示例。根据本文档,步骤中的值数量应比lrs中的值数量少1。另外,请注意,此计划程序中存在错误。你可以在这里查一下。

如果您使用的是tenstorflow 2.0,下面是一个有效的示例。我没有测试这个与tf 1.13。

import numpy as np
from tensorflow.python.keras.optimizer_v2 import learning_rate_schedule
n_step_epoch = 100
init_lr = 0.01
decay = 0.1

decay_type = 'multistep_15_25_100'
milestones = decay_type.split('_')
milestones.pop(0)
milestones = list(map(lambda x: int(x), milestones))
boundaries = np.multiply(milestones,n_step_epoch)
values = [init_lr] + [init_lr/(decay**-i) for i in  range(1,len(milestones)+1)]
learning_rate =learning_rate_schedule.PiecewiseConstantDecay(boundaries.tolist(), values)

希望这有帮助!

 类似资料:
  • 本文向大家介绍TensorFlow实现指数衰减学习率的方法,包括了TensorFlow实现指数衰减学习率的方法的使用技巧和注意事项,需要的朋友参考一下 在TensorFlow中,tf.train.exponential_decay函数实现了指数衰减学习率,通过这个函数,可以先使用较大的学习率来快速得到一个比较优的解,然后随着迭代的继续逐步减小学习率,使得模型在训练后期更加稳定。 tf.train.

  • 我正在努力把我的模型放在Android Studio。为了在Android studio中使用我的模型,我还知道需要将libandroid_tensorflow_inference_java.jar和libtensorflow_inference.so文件放入Android studio的资产文件夹中。因此,我使用git下载tensorflow库,并使用它构建。So和。jar文件。在创建。so文件

  • 我无法让贝叶斯线性回归与Tensorflow概率一起使用。这是我的代码: 有什么想法吗?

  • 我试图使用tenstorflow联邦学习工具为我的数据。我有两个数据集(dataset和dataset2)从csv文件中获得,其中前15列是功能,最后一列是标签。我将我的熊猫数据帧转换为tenstorflow数据集。然而,在迭代器处,有一个奇怪的类型错误。我是新来的tenrflow和发送代码:任何帮助将不胜感激。提前感谢。 错误消息如下: 回溯(最近一次调用):文件“/home/affectech

  • 问题内容: 我正在尝试使用tensorflow进行迁移学习。我从教程中下载了预训练的模型inception3。在代码中,为了进行预测: 有没有办法提供png图像。我尝试更改为,但没有成功。此外,如果我要馈送已解码的图像文件(例如numpy数组或一批数组),该怎么办? 谢谢!! 问题答案: 中使用的出厂的InceptionV3图形仅支持开箱即用的JPEG图像。您可以通过两种方式将此图用于PNG图像:

  • 我在scikit learn中使用fit函数进行分类培训。例如,在使用随机林时,通常使用以下类型的代码: 不幸的是,在使用Python 3时,我得到了以下错误: C:\Anaconda3\lib\site-pack\skLearning\base.py:175: DeprecationWarning:inspect.getargspec()已弃用,请使用inspect.signature()代替林