- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 Keras 2.0
包为 Python
训练一个批处理的神经网络。以下是有关数据和训练参数的一些信息:
以下是以下代码的一些日志:
for i in range(epochs):
print("train_model:: starting epoch {0}/{1}".format(i + 1, epochs))
model.fit_generator(generator=batch_generator(data_train, target_train, batch_size),
steps_per_epoch=num_of_batches,
epochs=1,
verbose=1)
(部分)日志:
train_model:: starting epoch 1/3
Epoch 1/1
1/406 [..............................] - ETA: 11726s - loss: 0.7993 - acc: 0.5996
2/406 [..............................] - ETA: 11237s - loss: 0.7260 - acc: 0.6587
3/406 [..............................] - ETA: 14136s - loss: 0.6619 - acc: 0.7279
404/406 [============================>.] - ETA: 53s - loss: 0.3542 - acc: 0.8917
405/406 [============================>.] - ETA: 26s - loss: 0.3541 - acc: 0.8917
406/406 [==============================] - 10798s - loss: 0.3539 - acc: 0.8918
train_model:: starting epoch 2/3
Epoch 1/1
1/406 [..............................] - ETA: 15158s - loss: 0.2152 - acc: 0.9424
2/406 [..............................] - ETA: 14774s - loss: 0.2109 - acc: 0.9419
3/406 [..............................] - ETA: 16132s - loss: 0.2097 - acc: 0.9408
404/406 [============================>.] - ETA: 64s - loss: 0.2225 - acc: 0.9329
405/406 [============================>.] - ETA: 32s - loss: 0.2225 - acc: 0.9329
406/406 [==============================] - 13127s - loss: 0.2225 - acc: 0.9329
train_model:: starting epoch 3/3
Epoch 1/1
1/406 [..............................] - ETA: 22631s - loss: 0.1145 - acc: 0.9756
2/406 [..............................] - ETA: 24469s - loss: 0.1220 - acc: 0.9688
3/406 [..............................] - ETA: 23475s - loss: 0.1202 - acc: 0.9691
404/406 [============================>.] - ETA: 60s - loss: 0.1006 - acc: 0.9745
405/406 [============================>.] - ETA: 31s - loss: 0.1006 - acc: 0.9745
406/406 [==============================] - 11147s - loss: 0.1006 - acc: 0.9745
我的问题是:在像这样提高准确性的每个纪元之后会发生什么?例如,第一个纪元结束时的精度为 0.8918,但在第二个纪元开始时观察到的精度为 0.9424。类似地,第二个 epoch 结束时的精度为 0.9329,但第三个 epoch 开始时的精度为 0.9756。
我希望在第二个纪元开始时找到 ~0.8918 的精度,在第三个纪元开始时找到 ~0.9329 的精度。
我知道在每批中批处理中的训练样本有一次正向传播和一次反向传播。因此,在每个时期,所有训练样本都有一次前向传播和一次反向传播。
此外,来自 Keras documentation :
Epoch:任意截止值,通常定义为“对整个数据集进行一次传递”,用于将训练分成不同的阶段,这对于记录和定期评估很有用。
为什么每个 epoch 内的精度提升小于 epoch X 结束到 epoch X+1 开始之间的精度提升?
最佳答案
这与您的模型或数据集无关;这种“跳跃”的原因在于指标在 Keras 中的计算和显示方式。
随着 Keras 处理一批又一批,它会保存每个批处理的准确度,它向您显示的不是最新处理的批处理的准确度,而是当前 epoch 中所有批处理的平均值。而且,随着模型的训练,连续批处理的准确度往往会提高。
现在考虑:假设在第一个时期有 50 个批处理,在这 50 个批处理中网络从 0% 变为 90%。然后在纪元结束时,Keras 将显示例如的准确性。 (0 + 0.1 + 0.5 + ... + 90)/50
%,显然远小于 90%!但是,因为你的实际精度是 90%,第二个 epoch 的第一批将显示 90%,给人一种质量突然“跳跃”的印象。显然,loss
或任何其他指标也是如此。
现在,如果您想要对准确性、损失或任何其他您可能会使用的指标进行更现实和可信的计算,我建议您在 model.fit[_generator] 中使用
提供验证数据,这些数据不会用于训练,而只会在每个 epoch 结束时用于评估网络,而不会对各个时间点进行平均。validation_data
参数]
关于python - 在神经网络中 : accuracy improvement after each epoch is GREATER than accuracy improvement after each batch. 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44130892/
我记得从 C 天起我们就被鼓励使用 i > -1 代替 i >= 0 因为性能。 这是否仍然适用于 C# .NET 世界?在当今的编译器中使用其中一种对性能有何影响?即编译器是否足够聪明,可以为您优化
比较小于/大于比小于/大于或等于计算性能更好吗? 凭直觉,人们可能会认为小于/大于稍微好一些。 编译器可以使用一些技巧来使比较看起来相同吗? 编译器可以消除例如小于或等于与小于通过将界限增加一来实现,
所以我想知道是否有一种方法可以实现双倍大于,如下所示: if(x > y > z) { ... } 然后我看到了这个 Expression for "more than x and less than
有些人写 std::nth_element(v.begin(), v.begin()+1, v.end(), std::greater{}); 还有一些是这样写的 std::nth_element(v
这个问题在这里已经有了答案: Speed of Comparison operators (6 个答案) 关闭 5 年前。 我有点好奇这些比较操作在幕后是如何工作的,因为我正在尝试尽可能地优化我的代
此代码有效: #include #include #include #include using namespace std; int main(){ priority_queue,g
我想显示以小时、分钟和秒为单位的时间长度,其中有些时间长度大于 24 小时。目前我正在尝试这个: $timeLength = new DateTime(); $timeLength->setTime(
在我看来,它们是一样的。但在 Visual Studio 2015 中,它们肯定是不同的。 //Ok, work properly multiset > ms1; ms1.insert(10); ms
假设我有两个符号 x,y=symbols('x y') 我的目的是告诉Sympy,x总是大于y(x> y)。有什么办法可以做到这一点? 最佳答案 无法直接执行此操作。 assumptions modu
这个问题在这里已经有了答案: Javascript string/integer comparisons (9 个回答) 关闭 6 年前。 在尝试确定一个值是否大于另一个值时,我遇到了一个奇怪的 J
我正在处理一个查询,我想在其中显示即将到来的日期的数量。即使日期大于当前日期,以下查询也会返回 0。请帮我解决这个问题。 SELECT (case when b.booked_date > cast
这是我的代码 #include #include #include #include using namespace std; /* struct greater {template
我有一个包含一百万个整数的数组,因为我正在试验并行快速排序。有时我有以下奇怪的行为: 为了检查数组是否排序正确,我在排序后输入了以下代码: for(int j=0; j array_parallel
template struct greater : binary_function { bool operator() (const T& x, const T& y) const {
我在使用基本 MySQL 查询时遇到了一个令人费解的问题。 这是我的 table : id | rating 1 | 1317.17 2 | 1280.59 3 | 995.12 4 | 97
我有如下数据集: table_a Product_Name Product_Orders game_296 1 game_298
我有几个疑问,其中大部分是: select * from Blah where col > 0 和 select * from Blah where date > current_date 由于它们都
我从列 A 的第 1 行输入了数值至IA .我想创建一个循环,将一个单元格与其之前的单元格进行比较(又名单元格 B1 到 A1 或单元格 F 到 E )。让我们使用 B1和 A1作为例子。它查看单元格
我知道 std::greater 是如何工作的。但是,当我阅读自 C++14 以来 std::greater 的 API 时,它的默认类型为 void。因此,如果我们不将任何模板参数传递给更大的它默认
有没有办法通过指定“日期大于 xxxxx”过滤器来返回 OData 中的一系列记录...但使用之前从 OData 源获取的日期? 用例:假设我想要构建一个网页来显示最近完成的在线订单的列表。这就是我的
我是一名优秀的程序员,十分优秀!