问题标签 [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-3.x - 用于各种维度输入的高效 PyTorch DataLoader collate_fn 函数
我在collate_fn
为 PyTorchDataLoader
类编写自定义函数时遇到问题。我需要自定义函数,因为我的输入具有不同的维度。
我目前正在尝试编写斯坦福 MURA 论文的基线实现。数据集有一组带标签的研究。一项研究可能包含多个图像。我创建了一个自定义Dataset
类,使用torch.stack
.
然后将堆叠张量作为输入提供给模型,并对输出列表进行平均以获得单个输出。此实现适用于DataLoader
when batch_size=1
。但是,当我尝试将 设置batch_size
为 8 时,就像原始论文中的情况一样,DataLoader
失败了,因为它用于torch.stack
堆叠批次并且我的批次中的输入具有可变尺寸(因为每个研究都可以有多个图像)。
为了解决这个问题,我尝试实现我的自定义collate_fn
函数。
然后在我的训练周期循环中,我像这样遍历每个批次:
但是,这并没有给我任何改进的时代时间,并且仍然需要与只有 1 的批量大小一样长。我还尝试将批量大小设置为 32,但这也没有改善时间。
难道我做错了什么?有更好的方法吗?
neural-network - 如何处理NN训练过程的随机性?
考虑使用小批量梯度下降的深度 FF 神经网络的训练过程。据我了解,在训练的每个时期,我们都有不同的随机小批量集。然后迭代所有小批量并计算 NN 参数的梯度,我们将在每次迭代中获得随机梯度,因此模型参数的随机方向可以最小化成本函数。假设我们固定了训练算法的超参数并一次又一次地开始训练过程,然后我们会得到彼此完全不同的模型,因为在那些训练中模型参数的变化是不同的。
1)当我们使用这种基于随机的训练算法时,总是这样吗?
2)如果是这样,那么使用在先前训练和验证中找到的最佳超参数再次训练 NN 将再次为我们提供最佳模型的保证在哪里?
3)是否有可能找到这样的超参数,它们总是会产生最好的模型?
python - 使用小批量的 Spacy 文本分类
我对示例 train_textcat.py 中使用的 minibatching 有疑问
主训练循环如下所示:
我在想为什么所有批次的小批量都在一次迭代中消耗,而不是在主循环的每次迭代中消耗一批?以下代码应该解释我的意思。
提前致谢!
你的环境
- spaCy 版本: 2.0.12
- 平台: Windows-10-10.0.14393-SP0
- Python版本: 3.6.5
- 型号: de
c - 使用小批量时如何更新权重?
我正在尝试对我的神经网络实施小批量训练,而不是更新每个训练样本的权重的“在线”随机方法。
我在 C 语言中开发了一个有点新手的神经网络,我可以调整每层中的神经元数量、激活函数等。这是为了帮助我理解神经网络。我已经在 mnist 数据集上训练了网络,但它需要大约 200 个 epoch 才能在训练集上执行 20% 的错误率,这对我来说非常糟糕。我目前正在使用在线随机梯度体面来训练网络。我想尝试的是使用小批量。我理解这样一个概念,即在将错误传播回去之前,我必须从每个训练样本中累积并平均错误。当我想计算必须对权重进行的更改时,我的问题就出现了。为了更好地解释这一点,请考虑一个非常简单的感知器模型。一个输入,一个隐藏层,一个输出。
∂C/∂w1=∂C/∂O*∂O/∂h*∂h/∂w1
如果你做偏导数,你会得到:
∂C/∂w1=(输出预期答案)(w2)(输入)
现在这个公式表明您需要将反向传播的误差乘以输入。对于有意义的在线随机训练,因为每次权重更新使用 1 个输入。对于小批量训练,您使用了许多输入,那么错误乘以哪个输入?我希望你能在这方面帮助我。
我附上的代码是我如何进行在线随机更新。正如您在 updateWeights() 函数中看到的,权重更新基于输入值(取决于输入的样本)和隐藏单元值(也取决于输入的输入样本值)。所以当我有我要传播的小批量平均梯度时,我将如何更新权重?我使用哪些输入值?
python - K-means minibatch 大数据上的内存错误
我正在使用 sklearn Kmeans Minibatch 对大数据进行聚类,但出现内存错误。
这是我在此配置上的笔记本电脑配置,它工作正常:
- 酷睿 i5 64 位
- Python 3.6.2
- 8 GB 内存
我将 TfidfVectorizer X存储在 .npz 文件(426 Mb)中。然后,我使用不同数量的集群对该X执行多次聚类。
X = sparse.load_npz("D:\clustering_final\sp-k2.npz")
n_samples:850900,n_features:1728098
使用 MiniBatchKMeans 对稀疏矩阵数据进行聚类
Batch_size=1000,n_clusters=500,compute_labels=True,init='k-means++',n_init=100
我的 python 脚本在这台笔记本电脑配置上运行良好,但是当我在另一台笔记本电脑上使用相同的 Python(所有相同的复制 python36 文件夹)时,它会出现内存错误。即使另一台笔记本电脑的配置很高:
- 酷睿 i5 64 位
- Python 3.6.2
16 GB 内存
km.fit(X) File "C:\python36\lib\site-packages\sklearn\cluster\k_means_.py", line 1418, in fit init_size=init_size) File "C:\python36\lib\site-packages\sklearn\cluster\k_means_.py", line 684, in _init_centroids x_squared_norms=x_squared_norms) File "C:\python36\lib\site-packages\sklearn\cluster\k_means_.py", line 79, in _k_init centers = np.empty((n_clusters, n_features), dtype=X.dtype) MemoryError
我检查了所有必需的库和其他依赖项,但它在低配置笔记本电脑上运行良好。为什么它不能在高配置笔记本电脑上运行?
我知道这听起来很奇怪,但这是真的。
python - tensorflow.python.framework.errors_impl.InternalError: Dst tensor is not initialized
I am following this Link to implement a cDCGAN on my own dataset. My dataset contains almost 391510 images. The image size of my dataset is 64 whereas the MNIST used in this link is 28. My dataset has 2350 labels where as the MNIST dataset has 10.
My dataset is in .tfrecords format so i am using a get_image() function to retrieve batch of images and labels from it as shown below. When i run my code i get the following error
When i searched about this error i found that if the batch size is large then it happens so i changed my batch size to 32 and then i got this new error.
`
My code section where i change the default code is below
These are my system specs
name: GeForce GTX 1070 major: 6 minor: 1 memoryClockRate(GHz): 1.645 pciBusID: 0000:01:00.0 totalMemory: 8.00GiB freeMemory: 6.62GiB
How can i resolve my problem?
python - 如何为最大似然估计python实现小批量梯度下降?
目前,我编写了一些代码,可以找到最大化对数似然函数和一些字段数据的参数组合。该模型现在从均匀分布中随机选择参数,然后选择最佳参数集。然而,这种方法不会给出可重复的结果。我想知道是否有人有任何示例代码来说明如何更新此代码以运行小批量梯度下降(或上升)方法以找到最佳参数集?
此外,该模型现在一次使用所有现场数据,而我希望在每次迭代时测试小批量数据。下面是我的代码:
其中 xs 是位置,ConData 是字段数据的集中度。然后在得到对数似然的概率后,我使用 argmax 来找到最佳的参数组合。
任何建议、链接或示例代码都会有所帮助,因为我无法找到 MLE 方法的 Python 示例!
python - “[...]”用tensorflow在磁盘上加载数据是什么意思
我从 tensorflow 和 Machine Learning 开始,但我有一本书非常有用。我想实现小批量梯度下降。我完全按照他们所说的去做,但没有用。
它被解释为:“最后,在执行阶段,一个一个地获取小批量,然后在评估依赖于它们中的任何一个的节点时,通过 feed_dict 参数提供 X 和 Y 的值。”
我正在使用Jupyter notebook
,tensorflow 1.3.0.
这是我尝试过的:
这是错误:
所以我的问题是,我应该用那个 [...] 做什么,它是从磁盘加载数据的真正方法还是应该用其他东西替换它?
c - 如何在 C 中从随机梯度下降开始实现小批量梯度下降?
我做了一个随机 NN,但变化太大,所以我想去做一批,但是,据我尝试,我无法得到可接受的结果,我不明白我什么时候完成了转发如何组合数据以更新权重。
有一个输入层,一个隐藏层和一个输出层。
现在,我尝试将所有增量加在一起并对它们进行平均,但结果很差。这是我一个时代的随机版本。
batch-processing - 了解在 DBOW 的单个时期发生了什么
我正在使用分布式词袋 (DBOW),我很好奇在单个 Epoch 期间会发生什么?DBOW 是循环遍历所有文档(又名 Batch)还是循环遍历文档子集(又名 Mini-batch)?另外,对于给定的文档,DBOW 会从文本窗口中随机抽取一个词,并学习将目标词与窗口中的周围词关联起来的权重,这是否意味着 DBOW 可能不会遍历文档中的所有文本?
我已经通过 GENSIM ( https://github.com/RaRe-Technologies/gensim ) 代码来确定是否有批处理参数,但没有运气。