问题标签 [mini-batch]
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.
python - Tensorflow:如何使用 tf.train.batch()
我将 Tensorflow(版本 1.7.0 和 Python 3.5)用于神经网络,但在使用该tf.train.batch()
函数时遇到问题。见这里。
我的数据集的维度是:
测试图像 (100000, 900) 测试标签 (100000, 10)
所以我有 100000 张大小为 30 x 30 像素的测试图像。标签是大小为 100000 x 10 的 one-hot 矩阵。
现在我想得到一个大小为 100 的随机批次并想使用该功能tf.train.batch()
。
我在我的代码中使用如下函数:
这样做我得到以下错误:
我该怎么做才能tf.train.batch()
使我的网络正常工作?我是否需要使用另一种方法来创建小批量?
python - 是否有可以导入梯度下降函数/方法的 Python 库?
在 Python 中进行梯度下降的一种方法是自己编写代码。但是,考虑到它在机器学习中的流行程度,我想知道是否有一个 Python 库可以导入,它给了我一个梯度下降方法(最好是小批量梯度下降,因为它通常比批量和随机梯度下降更好,但如果我错了,请纠正我)。
我检查了 NumPy 和 SciPy,但找不到任何东西。我没有使用 TensorFlow 的经验,但查看了他们的在线 API。我找到了 tf.train.GradientDescentOptimizer,但没有参数可以让我选择批量大小,所以我对它的实际含义相当模糊。
对不起,如果我听起来很幼稚。我正在自学很多这样的东西。
python - 对不同大小的 minibatch 进行训练
我正在尝试在 PyTorch 中对已存储到特定尺寸的图像训练深度学习模型。我想使用小批量训练我的模型,但小批量大小并不能很好地划分每个桶中的示例数量。
我在上一篇文章中看到的一个解决方案是用额外的空白填充图像(在训练开始时即时或一次全部填充),但我不想这样做。相反,我想在训练期间允许批量大小灵活。
具体来说,如果N
是存储桶中的图像数量并且B
是批量大小,那么对于该存储桶,我希望得到N // B
批次(如果是B
分N
),N // B + 1
否则是批次。最后一批可以有少于B
示例。
例如,假设我有索引 [0, 1, ..., 19],包括在内,我想使用 3 的批量大小。
索引 [0, 9] 对应存储桶 0 中的图像(形状 (C, W1, H1))
索引 [10, 19] 对应存储桶 1 中的图像(形状 (C, W2, H2))
(所有图像的通道深度相同)。那么可接受的索引分区将是
我更愿意分别处理索引为 9 和 19 的图像,因为它们具有不同的尺寸。
通过查看 PyTorch 的文档,我找到了BatchSampler
生成小批量索引列表的类。我创建了一个Sampler
模拟上述索引分区的自定义类。如果有帮助,这是我的实现:
但是,当我使用自定义Sampler
类时,会生成以下错误:
该类DataLoader
似乎期望传递索引,而不是索引列表。
我不应该Sampler
为此任务使用自定义类吗?我还考虑过自定义collate_fn
传递给DataLoader
,但使用这种方法我不相信我可以控制允许哪些索引在同一个小批量中。任何指导将不胜感激。
python - 为什么 torch.nn 包不支持单个样本的输入
我试图用 pytorch 理解深度学习。我阅读了 pytorch 教程:https://pytorch.org/tutorials/beginner/blitz/neural_networks_tutorial.html,其内容如下:
''torch.nn 只支持小批量。整个 torch.nn 包仅支持作为小批量样本的输入,而不是单个样本。例如,nn.Conv2d 将采用 nSamples x nChannels x Height x Width 的 4D 张量。如果您只有一个样本,只需使用 input.unsqueeze(0) 添加一个假的批次维度。''
我不确定它是什么意思。事实上,我已经制作了一个简单的前馈神经网络(参见下面的代码),在该网络上我使用了一个非常小的数据集(这个想法是先了解它如何在没有小批量的情况下工作,而不是真正有任何有用的东西),并且因此不需要使用小批量。因此,我直接介绍每个时期的所有样本。如果我理解正确,我应该添加“train_data = train_data.unsqueeze(0)”。但我不确定在哪里,因为它似乎将数据大小更改为 1。此外,它无需添加此行即可工作,所以我为什么要真正使用它?
任何帮助将不胜感激!
deep-learning - CNTK 以百分比加载具有类从属关系的图片
我正在尝试用 CNTK 建立一个神经网络来估计一个人的年龄。
目前我想尝试一种只使用一个类的方法。因此,每张图片都获得标签 0,但也以百分比表示与该类的从属关系。所以网络应该知道一个 30 岁的人匹配 0 类的概率是 30% ... 60yo = 60% ... 93yo = 93%。
目前,我正在处理 50k 图像 (.jpg) 的缩减数据集,并使用MiniBatchSourceFromData函数。
由于我有更多可用的训练数据(400k + 增强),由于服务器 RAM 有限,我想以块的形式加载图片进行训练。按照这个CNTK 教程,我必须使用MiniBatchSource函数并为反序列化器提供一个 map_file,其中包含我的训练数据的路径和标签。.
我的问题是,map_file不支持类从属关系。我只能定义什么图片属于哪个类。
由于我是 CNTK 和深度学习的新手,我想知道是否有另一种选择来读取分块数据以及告诉网络图片对应于特定类的可能性有多大。
此致。
neural-network - H2O.ai mini_batch_size 真的用过吗?
在 H2O 的文档中写道:
mini_batch_size:指定小批量大小的值。(较小的值导致更好的拟合;较大的值可以加速和更好地概括。)
但是当我使用日志文件中的 FLOW UI(mini_batch_size > 1)运行模型时,会写入:
WARN: _mini_batch_size 目前仅支持 mini-batch size = 1。
所以问题是:mini_batch_size 真的被使用了吗?
python - 自定义 CNN mini-batch (Keras, TF) 以避免在训练/测试中重复测量
我目前正在构建一个 1D-CNN 进行分类。预测变量是光谱(具有 779 个特征的X矩阵),因变量包含两个类别。
但是,X矩阵包含重复测量(15-20 次重复系列)。至关重要的是,在训练过程中,重复测量不包括在训练集中和损失函数评估集中。有没有办法构建可以避免这种情况的“自定义”小批量?
python - TensorFlow 优化器是否最小化 API 实现的小批量?
当我们向输入张量提供小批量数据时,Tensorflow 是否已经最小化了 API,比如 GradientDescentOptimizer 已经实现了小批量?
我正在阅读这个博尔格,它表明该minimize
方法中没有实现 minibatch,我们必须先做compute_gradients
,然后累积梯度,最后做apply_gradients
才能完成 minibatch 训练。
然而,当我做实验时,我发现两种方法产生了相似的结果。我想知道如果我们是一个小批量大小矩阵而不是一行训练数据,该minimize
方法是否会进行小批量更新。feed_dict
如果我错了,谁能帮我澄清这个问题并纠正我?
最好的祝福
python - LSTM Keras 中的生成器函数,用于输出一个文件的小批量
我有一个可以正常工作的生成器功能。我有一个很大的 .txt 文件列表,其中每个文件也很长。现在的任务是编写一个生成器函数,它需要:
- 一批文件
- 然后从一个文件中取出一批大小为 128 的文件
我现在的代码:
所以即将到来的是一个文本文件,它被转换成更小的文本片段(长度为maxlen
),然后被热编码为 0 和 1 矩阵。
问题是,从我的代码中,输出是一个大小maxlen x lenght(chars) x samples
的数据立方体,其中样本数量非常大,这就是为什么我希望我的生成器函数始终输出一个大小的立方体,maxlen x lenght(chars) x samples(128)
然后输出下一批大小maxlen x lenght(chars) x samples
直到整个读入文本文件,然后转到下一个文本文件...
现在的输出是一个错误:
希望我已经解释得足够好,可以理解。我想我必须输入某种 for 循环来迭代样本长度,但我不知道如何将它包含到 gen.xml 中。功能。
tensorflow - 如何在 Tensorflow 的小批量中进行选择性反向传播?
最近,我正在开展一个项目“通过在 Tensorflow 中使用 LSTM,根据过去的轨迹预测对象的未来轨迹”。(这里,轨迹是指一系列 2D 位置。)
LSTM 的输入当然是“过去的轨迹”,输出是“未来的轨迹”。
mini-batch 的大小在训练时是固定的。但是,小批量中过去轨迹的数量可以不同。例如,让 mini-batch 大小为 10。如果当前训练迭代只有 4 条过去的轨迹,则 mini-batch 中 10 个中的 6 个被填充为零值。
在计算反向传播的损失时,我让 6 的损失为零,这样只有 4 有助于反向传播。
我担心的问题是..Tensorflow 似乎仍然计算 6 的梯度,即使它们的损失为零。结果,即使我使用相同的训练数据,随着我增加小批量大小,训练速度也会变慢。
在计算损失时,我还使用了 tf.where 函数。但是,训练时间并没有减少。
如何减少培训时间?
在这里,我附上了我的伪代码进行培训。