使用.fit_generator()
or训练图像分类器.fit()
并将字典传递给class_weight=
作为参数。
我在 TF1.x 中从未出错,但在 2.1 中,我在开始训练时得到以下输出:
WARNING:tensorflow:sample_weight modes were coerced from
...
to
['...']
Run Code Online (Sandbox Code Playgroud)
将某物从 强制...
到是什么意思['...']
?
了解关于这一警告源tensorflow
的回购是在这里,摆放的意见是:
尝试将 sample_weight_modes 强制为目标结构。这隐含地取决于模型将其内部表示的输出展平的事实。
假设我想编写一个符合tf.keras
API的自定义优化器类(使用 TensorFlow version>=2.0)。我对记录在案的方法与实现中的方法感到困惑。
tf.keras.optimizers.Optimizer
状态的文档,
### Write a customized optimizer.
If you intend to create your own optimization algorithm, simply inherit from
this class and override the following methods:
- resource_apply_dense (update variable given gradient tensor is dense)
- resource_apply_sparse (update variable given gradient tensor is sparse)
- create_slots (if your optimizer algorithm requires additional variables)
Run Code Online (Sandbox Code Playgroud)
不过,目前的tf.keras.optimizers.Optimizer
实现没有定义resource_apply_dense
方法,但它确实定义了一个私人的前瞻性_resource_apply_dense
方法存根。同样,没有resource_apply_sparse
orcreate_slots
方法,但有_resource_apply_sparse
方法存根和_create_slots
方法调用。
在官方 …
一个官方教程上@tf.function
说:
为了获得最佳性能并使您的模型可在任何地方部署,请使用 tf.function 从您的程序中制作图形。感谢 AutoGraph,数量惊人的 Python 代码仅适用于 tf.function,但仍有一些陷阱需要警惕。
主要的收获和建议是:
- 不要依赖 Python 的副作用,如对象突变或列表追加。
- tf.function 最适合 TensorFlow 操作,而不是 NumPy 操作或 Python 原语。
- 如有疑问,请使用 for x in y 习语。
它只提到了如何实现带@tf.function
注释的函数,而没有提到何时使用它。
关于如何决定我是否至少应该尝试用 注释函数是否有启发tf.function
?似乎没有理由不这样做,除非我懒得去除副作用或更改诸如range()
-> 之类的东西tf.range()
。但如果我愿意这样做......
是否有任何理由不@tf.function
用于所有功能?
我正在尝试为 Tensorflow keras 中的二元分类训练一个简单的 2 层全连接神经网络。我已经使用 sklearn 的train_test_split()
.
当我打电话时model.fit(X_train, y_train, validation_data=[X_val, y_val])
,它显示所有时期的验证损失和准确性为 0,但它训练得很好。
此外,当我尝试在验证集上对其进行评估时,输出非零。
有人可以解释为什么我在验证时遇到这个 0 loss 0 准确度错误。谢谢你的帮助。
以下是此错误的完整示例代码 (MCVE):https ://colab.research.google.com/drive/1P8iCUlnD87vqtuS5YTdoePcDOVEKpBHr?usp=sharing
可以看出,我在“error_giving_notebook”中使用了 tf.function 装饰器,它抛出了 ValueError 而同一个笔记本除了删除 tf.function 装饰器之外没有任何更改,在“non_problematic_notebook”中运行流畅。原因是什么?
背景
我对 Python 和机器学习完全陌生。我只是尝试根据在互联网上找到的代码建立一个 UNet,并希望将其适应我正在处理的情况。当尝试使用.fit
UNet 来训练数据时,我收到以下错误:
InvalidArgumentError: required broadcastable shapes at loc(unknown)
[[node Equal (defined at <ipython-input-68-f1422c6f17bb>:1) ]] [Op:__inference_train_function_3847]
Run Code Online (Sandbox Code Playgroud)
当我搜索它时,我得到了很多结果,但大多数都是不同的错误。
这是什么意思?更重要的是,我该如何解决这个问题?
导致错误的代码
该错误的上下文如下:我想分割图像并标记不同的类。我为训练、测试和验证数据设置了目录“trn”、“tst”和“val”。该dir_dat()
函数适用于获取相应数据集os.path.join()
的完整路径。这 3 个文件夹中的每一个都有每个类的子目录,并用整数标记。在每个文件夹中,都有一些相应类别的图像。.tif
我定义了以下图像数据生成器(训练数据稀疏,因此增强):
classes = np.array([ 0, 2, 4, 6, 8, 11, 16, 21, 29, 30, 38, 39, 51])
bs = 15 # batch size
augGen = ks.preprocessing.image.ImageDataGenerator(rotation_range = 365,
width_shift_range = 0.05,
height_shift_range = 0.05,
horizontal_flip = True,
vertical_flip = True,
fill_mode = "nearest") \
.flow_from_directory(directory = dir_dat("trn"), …
Run Code Online (Sandbox Code Playgroud) python neural-network conv-neural-network tensorflow tf.keras
我最近开始使用 Tensorflow 进行深度学习。我发现这个说法model = tf.keras.models.Sequential()
有点不同。我不明白这到底是什么意思,还有其他深度学习模型吗?我在 MatconvNet(卷积神经网络的 Matlab 库)上做了很多工作。从未在其中看到任何顺序定义。
我目前正在使用一个tf.keras.utils.Sequence
对象为 CNN 生成图像批次。我正在使用 Tensorflow 2.2 和Model.fit
模型的方法。当我拟合模型时,当我设置时use_multiprocessing=True
,在每个纪元中都会抛出以下警告tf.keras.model.fit(...)
:
WARNING:tensorflow:multiprocessing can interact badly with TensorFlow,
causing nondeterministic deadlocks. For high performance data pipelines tf.data is recommended
Run Code Online (Sandbox Code Playgroud)
该模型优化得很好,正如文档所预期的那样,而且我使用的是Sequence
基于生成器的事实。但是,如果use_multiprocessing
要使用已弃用的功能来代替tf.data
对象,我想使用最新的输入管道。我目前使用以下tf.keras.utils.Sequence
基于生成器的灵感来自这篇关于分区大型数据集的良好实践的文章:https :
//stanford.edu/~shervine/blog/keras-how-to-generate-data-on-the-fly
class DataGenerator(keras.utils.Sequence):
'Generates data for Keras'
def __init__(self, list_IDs, labels, data_dir, batch_size=32, dim=(128,128), n_channels=1,
n_classes=2, shuffle=True, **augmentation_kwargs):
'Initialization'
self.dim = dim
self.batch_size = batch_size
self.labels = labels
self.list_IDs = list_IDs
self.data_dir = data_dir
self.n_channels = n_channels
self.n_classes …
Run Code Online (Sandbox Code Playgroud) 背景:我有一个模型,我正试图将它移植到TF 2.0
一些甜蜜的急切执行上,但我似乎无法弄清楚如何进行分布式训练(4 个 GPU)并同时执行梯度累积。
问题:
我需要能够使用带有梯度磁带的自定义训练循环,因为我有一个复杂的多模型问题(几个输入模型和输出模型一起训练),我不需要二阶梯度
使用我的模型的大小(中等大小,类似于中型变压器),我无法使用 4 个 GPU 获得大于 ~32 的批量大小,这是我可以获得的最大实例,遗憾的是,这些确实是旧的 11GB K80 是因为 Azure 似乎认为 Google 甚至不再免费赠送的 GPU 已经足够好了......
我有一个需要非常大批量的数据集,因为我必须考虑到非常大的不平衡(我也在使用权重和焦距损失 ofc),因此我需要执行 4-8 步梯度累积来平滑梯度。
我已经阅读了分布式训练循环指南并设法实现了它:https : //www.tensorflow.org/beta/tutorials/distribute/training_loops
我还在 TF 2.0 中为自定义训练循环实现了梯度累积,并且tf.keras
:https :
//colab.research.google.com/drive/1yaeRMAwhGkm1voaPp7EtFpSLF33EKhTc
我刚开始使用keras并注意到有两个层的 max-pooling 名称非常相似:MaxPool
和MaxPooling
. 我很惊讶我在谷歌上找不到这两者之间的区别;所以我想知道两者之间有什么区别(如果有的话)。