问题标签 [custom-training]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
tensorflow - 如何在 Tensorflow Keras API 中使用配对数据集样本创建联合损失?
我正在尝试训练一个自动编码器,其约束迫使一个或多个隐藏/编码节点/神经元具有可解释的值。我的训练方法使用成对图像(尽管在训练后模型应该对单个图像进行操作)并利用一个联合损失函数,其中包括(1)每个图像的重建损失和(2)隐藏/隐藏值之间的比较来自两个图像中的每一个的编码向量。
我创建了一个类似的简单玩具问题和模型,以使这一点更清楚。在玩具问题中,给自编码器一个长度为 3 的向量作为输入。编码使用一个密集层来计算平均值(标量)和另一个密集层来计算向量的其他一些表示(根据我的构造,它可能只学习一个单位矩阵,即复制输入向量)。见下图。隐藏层的最低节点旨在计算输入向量的均值。除了必须适应与输入匹配的重建之外,其余隐藏节点不受约束。
下图展示了我希望如何使用配对图像来训练模型。“MSE”是均方误差,尽管实际函数的身份对于我在这里提出的问题并不重要。损失函数是重建损失和平均估计损失的总和。
我尝试创建 (1) 一个 tf.data.Dataset 来生成配对向量,(2) 一个 Keras 模型,以及 (3) 一个自定义损失函数。但是,我无法理解如何针对这种特殊情况正确执行此操作。
我无法让 Model.fit() 正确运行,并将模型输出与预期的数据集目标相关联。请参阅下面的代码和错误。任何人都可以帮忙吗?我已经完成了许多 Google 和 stackoverflow 搜索,但仍然不明白如何实现这一点。
输出:数据集中的示例批次:
输出:模型摘要:
输出:调用 model.fit() 时的错误信息:
python - 使用@tf.function 进行自定义张量流训练的内存泄漏
我正在尝试TF2/Keras
按照官方 Keras 演练编写自己的训练循环。vanilla 版本就像一个魅力,但是当我尝试将@tf.function
装饰器添加到我的训练步骤时,一些内存泄漏占用了我所有的内存并且我失去了对我机器的控制,有人知道发生了什么吗?
代码的重要部分如下所示:
如果我对这些@tf.function
行发表评论,则不会发生内存泄漏,但步骤时间慢了 3 倍。我的猜测是,不知何故,图表是在每个时期或类似的情况下再次创建的 bean,但我不知道如何解决它。
这是我正在关注的教程:https ://keras.io/guides/writing_a_training_loop_from_scratch/
transformer - 训练 TimeSFormer 进行视频分类
我的输入数据是特征图,而不是原始图像。并具有以下形式:(4,50,1,1,256)
mini_batch=4 / frames=50 / channels=1 / H=1 / W= 256
TimeSformer 的参数是:
为了检查我的网络是否正常工作,我试图通过仅使用 6 个训练数据和 2 个与以前形状相同的验证数据来使其过拟合(4,50,1,1,256)
。但是我得到的训练精度处于振荡状态并且永远不会达到> 80%的值并且我的训练损失并没有减少它总是在附近0.6900 - 06950
我的训练函数和参数是:
我会很感激任何建议。谢谢你
python-3.x - Tensorflow 2.x 中的微批处理(累积梯度)与 tf.function
如何在 tensorflow 2.x 中实现微批处理?那就是我想累积几个批次的梯度,然后用这些累积的梯度更新权重(这实际上会将我的批量大小增加到累积步骤 * 批量大小)。
我尝试使用以下代码:
但是,我遇到了两个不同的问题,具体取决于我是在 tf.function 修饰函数中使用 tf.range 还是 range 。
- 使用范围:它适用于提供的迷你模型,但在我的用例中,模型明显更大(2.6 Mio 参数),当我像这样累积梯度时,会引发以下错误:
2021-04-24 18:19:28.349940: W tensorflow/core/common_runtime/process_function_library_runtime.cc:733] 忽略多设备功能优化失败:已超过截止日期:meta_optimizer 已超过截止日期。
我的猜测是使用范围(据我了解 tf.function 的工作原理)每个梯度累积步骤都会添加到图中,而不是重复这部分并仅添加一次。
- 用 tf.range 替换 range 会引发以下错误:
因此,我初始化了所有出现的变量,例如梯度、损失和预测,然后它可以工作,但它非常缓慢(在我的用例中)为什么会这样?
我错过了什么?非常感谢任何帮助。
model - 如何在我的 ssd 初始模型上添加新的检测对象?
我有一个问题,是否可以在新对象上重新训练对象检测模型?
我试过这个教程:https ://towardsdatascience.com/custom-object-detection-using-tensorflow-from-scratch-e61da2e10087 ,它工作得很好。现在我的模型可以检测到 8 个不同的对象。
但现在,这是我的问题,我想在 4 个新对象上重新训练他。是否存在不对这 12 个对象的所有图像进行重新训练的方法?只需在我的 4 个新对象上重新训练他,他就会检测到全部 12 个?我想使用我的旧模型,并在新的 4 个对象上训练他,因为如果我为这 12 个对象重新创建一个新模型,它将花费一些时间......
你知道我该怎么做吗?我尝试了一些东西,但它不起作用,因为他不想使用新的 4 个模型进行我的最后一个检查点(bcs 检测数量不匹配)。
非常感谢 !
pytorch - 如何在保持可训练性的同时将神经网络的输出转换为长类型
我的 pytorch 神经网络的输出是 float64 类型的数据。该变量必须用作像素偏移量,因此我需要将其转换为长类型。
但是我刚刚发现转换 out=out.long() 将变量属性“.requires_grad”切换为 False。
如何将其转换为长期维护“.requires_grad”为真?
spacy - 在多个 GPU(不仅仅是一个)上训练 spaCy NER 模型
我正在使用以下代码训练我的 NER 模型。
代码开始:
代码结束。
问题:
问题是每次迭代大约需要 30 分钟——我有 8000 条训练记录,其中包括很长的文本和 6 个标签。
所以我希望使用更多的 GPU 内核来减少它,但似乎只使用了一个内核 - 当我在上面的代码中执行 print(util.gpu) 时,只有第一个内核返回一个非零值。
问题 1:有什么方法可以在训练过程中使用更多的 GPU 内核来提高速度?我会很感激任何线索。
经过更多研究,spacy-ray 似乎旨在实现并行训练。但是我在 nlp.update 中找不到有关使用 Ray 的文档,因为我发现的只是使用“python -m spacy ray train config.cfg --n-workers 2”。
问题 2:Ray 是否支持使用 GPU 进行并行处理,是否仅适用于 CPU 内核?
问题 3:我如何将 Ray 集成到我使用 nlp.update 的 Python 代码中,而不是使用“python -m spacy ray train config.cfg --n-workers 2”。?
谢谢!
环境:
上面的所有代码都在 AWS Sagemaker 上使用 ml.p3.2xlarge EC2 实例的一个 conda_python3 笔记本中。
使用的Python 版本:3
spaCy 使用的版本:3.0.6
spacy - NER spacy 自定义训练模型无法正确预测标签
使用文档https://towardsdatascience.com/train-ner-with-custom-training-data-using-spacy-525ce748fab7和https://spacy.io/usage/processing-pipelines训练 NER spacy自定义训练模型测试用例数据集以在给定文本中准确找到货币。
示例数据集:
通过将模型命名为“货币”成功地训练了模型。它对带有正确标签的训练数据集预测良好,但大多数情况下它预测带有错误标签的未经训练的文本数据。
输入测试行:'I have AZWSQTS lot LOT of Indian MZW currency USD INR'
输出:
AZWSQTS - CUR,LOT - CUR,MZW - CUR,美元 - CUR,印度卢比 - CUR
在这里,“AZWSQTS”和“LOT”不是一种货币,但它预测,这就是我遇到的问题。
完整代码:
tensorflow - 使用 iou_threshold 0.5 的评估是 0.000000
我正在使用 PixelLib 来创建自定义培训。这些是我的训练步骤:
我得到的结果是:
因此,损失是一个可接受的值(大约 0.22),但是当我评估模型时:
我得到了这个结果:
这看起来很奇怪,因为损失很低但 IoU 值正好是 0.0。可能是什么问题,我该如何解决?提前致谢