问题标签 [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.
machine-learning - 深度学习中的小批量损失函数
如果我理解正确,当对小批量使用深度学习时,我们在每个小批量中都有一个前向和后向传递(使用相应的优化器)。但是在时代结束时(在使用所有小批量之后)会发生不同的事情吗?
我要问的原因是,在我实现用于图像分割的 u-net 时,我看到每个 mini batch 的损失都会略微减少(大约为 0.01)。然后,当新的 epoch 开始时,第一个 mini batch 相对于前一个 epoch 的最后一个 mini batch 的 loss 变化很大(大约 0.5)。此外,在第一个 epoch 之后,测试数据的损失与下一个 epoch 中第一个 mini batch 的损失顺序相同。
我会将此解释为在 epoch 结束时权重的更新速度比不同的 mini batch 更快,但我发现没有理论支持这一点。我将不胜感激。
至于优化器,随机梯度下降和 Adam 都会发生这种情况。如果有帮助,我正在使用 Keras。
c# - C# CNTK Sparse(和其他)使用 MinibatchSource
我刚开始使用 CNTK C# API,到目前为止,如果我以可以使用完整矩阵阅读器读取的方式编写文件,加载文件没有问题,例如,MNIST 教程示例:
MinibatchSource minibatchSourceExistModel = MinibatchSource.TextFormatMinibatchSource(Path.Combine(ImageDataFolder, "MNIST_test.ctk"), streamConfigurations);
我对稀疏数据感到困惑。使用 MinibatchSource 加载所有可能形式的输入示例的 C# 参考将有所帮助。
我需要保存文件中的所有零吗?是否有示例文件显示如何编写稀疏数据并将其加载以用作 MinibatchSource 输入?
谢谢
tensorflow - 无法将小批量输入到 Tensorflow 输入占位符 - Tensorflow 1.3.0
谁能告诉我为什么我不能将小批量数据提供给我的输入tf.nn.placeholder
?最近有什么变化是因为它在去年对我有用吗?
错误:
Cannot feed value of shape (1024, 784) for Tensor 'nn_inputs:0', which has shape '(?, 768)'
我的输入tf.nn.placeholder
是:
tensorflow - 训练后的递归神经网络小批量依赖
目前,我有一个神经网络,内置于 tensorflow 中,用于将时间序列数据分类为 6 个类别之一。该网络由以下部分组成:
2 个全连接层 -> LSTM 单元 -> softmax -> 输出
所有层都以 dropout 和/或层归一化的形式进行正则化。为了加快训练过程,我使用了小批量数据,其中小批量大小 = # of categories = 6。每个 mini-batch 包含 6 个类别中的每一个的一个样本,在 mini-batch 中随机排列。下面是前馈代码,其中 x 的形状为 [batch_size、时间步数、特征数],各种 get 命令是用于创建标准全连接层和具有正则化的 LSTM 单元的简单定义。
令人惊讶的是,这个网络训练得非常好,在我的测试数据上给了我大约 99.75% 的准确率(这是经过训练的网络从未见过的)。但是,只有当我将训练数据以与训练期间相同的 mini-batch 大小输入网络时,它才得分这么高,6.如果我一次只输入一个样本(mini-batch size = 1) ,网络得分约为 60%。奇怪的是,如果我只用单个样本(mini-batch size = 1)训练网络,一旦网络训练好,训练后的网络就可以很好地工作并且准确度很高。这让我得出一个奇怪的结论,即网络几乎正在学习在其学习中利用批量大小,以至于它变得依赖于小批量来正确分类。
深度网络是否会在训练期间变得依赖于小批量的大小,以至于最终训练的网络需要输入数据具有相同的小批量大小才能正确执行?
所有的想法或想法都会被喜欢!
tensorflow - Tensorflow:在小批量上进行训练,先快后慢
我是 tensorflow 的初学者,我正在尝试使用“小批量”训练模型。为此,我创建了一个生成器并对其进行迭代。我遇到的问题是,在时代开始时,火车似乎很快(每秒很多批次)然后火车慢下来(每秒 1 批次)所以我想知道我的代码哪里错了,但我没有发现问题。
machine-learning - 反向传播的数量作为神经网络的性能指标
我一直在阅读有关SRCNN的文章,发现他们正在使用“反向传播的数量”来评估网络的性能,即在 x 个反向传播之后网络能够学习什么(据我所知)。我想知道反向道具的数量实际上意味着多少。这只是训练期间使用的训练数据样本的数量吗?或者可能是小批量的数量?也许它是前面的数字之一乘以网络中可学习参数的数量?还是完全不同的东西?也许还有一些其他更常见的名称,我可以在某个地方循环并阅读更多关于它的信息,因为我无法通过搜索“反向传播数量”或“反向传播数量”找到任何有用的东西?
额外的问题:这个指标的使用范围有多广,它有多好?
python - tensorflow,小批量,tf.placeholder - 在给定迭代中读取节点的状态
我想在每个时期/批次组合中打印 MSE 的值。下面的代码在每次迭代中报告表示 mse 而不是它的值的张量对象:
输出示例行:
Epoch 0 Batch_Index 0 MSE: Tensor("mse_2:0", shape=(), dtype=float32)
我理解这是因为 MSE 引用了 tf.placeholder 节点,这些节点本身没有任何数据。但是一旦我运行下面的代码:
数据应该已经可用,因此取决于该数据的所有节点的值也应该可以访问,我认为在打印语句中请求评估 MSE 会导致错误
输出2:
InvalidArgumentError:您必须使用 dtype float 和 shape [?,9] 为占位符张量“X_2”提供一个值 ...
这告诉我mse.eval()
看不到中定义的数据sess.run()
为什么我们会经历这样的行为?我们应该如何更改代码以使其在每次指定迭代时报告 MSA?
tensorflow - 小批量梯度下降中 dropout 的混淆使用
我的问题在最后。
一个用 mini-batch GD 训练的 CNN示例,并使用最后一个全连接层(第 60 行)中的 dropout 作为
起初我认为tf.layers.dropout
ortf.nn.dropout
随机将列中的神经元设置为零。但我最近发现情况并非如此。下面的一段代码打印了它的dropout
作用。我将fc0
用作 4 个样本 x 10 特征矩阵,并将fc
用作丢弃版本。
在输出中oo.txt
(原始矩阵:第 1-4 行,退出矩阵:第 5-8 行):
我的理解正确吗?dropout 是在小批量或批量梯度下降阶段为每个样本剔除 p%相同的单元,并且反向传播更新“细化网络”的权重和偏差。然而,在示例的实现中,一批中每个样本的神经元被随机丢弃,如第 5 到第 8 行所示,并且对于每个样本,“细化网络”是不同的。oo.txt
作为比较,在随机梯度下降的情况下,样本被一个一个地输入神经网络,并且在每次迭代中,每个tf.layers.dropout
引入的“细化网络”的权重都会更新。
我的问题是,在小批量或批量训练中,不应该实现为一批中的所有样本敲除相同的神经元吗?也许通过在每次迭代中对所有输入批次样本应用一个掩码?就像是:
现在我认为示例中的 dropout 策略可能是一种更新某个神经元权重的加权方式,如果一个神经元在一个小批量中保持在 10 个样本中的 1 个中,则其权重将更新alpha * 1/10 * (y_k_hat-y_k) * x_k
为在所有 10 个样本中保留另一个神经元的alpha * 1/10 * sum[(y_k_hat-y_k) * x_k]
权重?
来自这里的屏幕截图
python - Tensorflow:从 numpy 数组> 2 GB 创建小批量
我正在尝试将小批量的 numpy 数组提供给我的模型,但我坚持使用批处理。使用 'tf.train.shuffle_batch' 会引发错误,因为 'images' 数组大于 2 GB。我试图绕过它并创建占位符,但是当我尝试提供数组时,它们仍然由 tf.Tensor 对象表示。我主要担心的是我在模型类下定义了操作,并且在运行会话之前不会调用对象。有谁知道如何处理这个问题?
tensorflow - TensorFlow 重叠小批量
给定数据集中的一些数据(或张量)
tensor = tf.constant([1, 2, 3, 4, 5, 6, 7])
我需要通过绘制(比如)替换来创建N
一批元组。一个示例小批量可能是M
4 x 3
目的是避免以这种形式创建数据集
因为大量的冗余。当我将新的小批量输入到训练过程中时,应该即时创建这些批次。