Deep learning Keras:在批量生产线上处理批量数据时的测试、交叉验证和准确性

Deep learning Keras:在批量生产线上处理批量数据时的测试、交叉验证和准确性,deep-learning,keras,batch-processing,metrics,Deep Learning,Keras,Batch Processing,Metrics,有人能给我举一个完整的例子,它可以完成以下所有功能吗 使用train\u on\u batch() 为验证目的,从每个批次中留出数据 在处理完所有批次后,留出测试数据进行精度评估(参见下面我的示例的最后一行) 我在互联网上找到了大量1-5行代码片段,说明了如何调用train\u on\u batch()或fit\u generator(),但到目前为止,还没有任何代码清楚地说明如何在使用train\u on\u batch()时分离和处理验证和测试数据 F.Chollet的好例子Cifar1

有人能给我举一个完整的例子,它可以完成以下所有功能吗

  • 使用
    train\u on\u batch()
  • 为验证目的,从每个批次中留出数据
  • 在处理完所有批次后,留出测试数据进行精度评估(参见下面我的示例的最后一行)
我在互联网上找到了大量1-5行代码片段,说明了如何调用
train\u on\u batch()
fit\u generator()
,但到目前为止,还没有任何代码清楚地说明如何在使用
train\u on\u batch()
时分离和处理验证和测试数据

F.Chollet的好例子Cifar10_cnn()并没有说明我上面列出的所有要点

你可以说,“嘿,处理测试数据是你的问题。手动操作。”很好!但我不明白这些例行程序做得好到什么程度,甚至不知道这是否必要。它们大多是黑匣子,据我所知,它们在引擎盖下自动处理验证和测试数据。我希望更完整的例子能澄清这一困惑

例如,在下面的示例中,我从pickle文件中迭代读取批,我如何修改对批上训练的调用来处理验证数据?我如何留出测试数据(
test_x
&
test_y
),以便在算法结束时评估准确性

而1:
尝试:
批处理=np.数组(pickle.load(fvecs))
极性=np.数组(pickle.load(fpols))
#将一批1000份文档(电影评论)分为:
#800行训练数据,以及
#200行测试(验证?)数据
序列x、val\u x、序列y、val\u y=序列测试分割(批次、极性、测试大小=0.2)
文件大小=30
x\u批次=焊盘顺序(x列,最大=文件大小)
y\u批次=第y列
#符合模型
型号。批量生产(x批、y批)
#模型拟合(序列x,序列y,验证数据=(值x,值y),年代=2,批量大小=800,详细度=2)
除EOFError外:
打印(“检测到EOF”)
打破
#模型的最终评估
分数=模型。评估(测试x,测试y,详细=0)
打印(“精度:%.2f%%”%(分数[1]*100))

我无法向您提供完整的示例,但正如您所看到的,您既有批量训练,也有批量测试,这表明“批量训练”功能应该只训练模型,而不是测试它

只是为了进一步确保您可以在代码中看到函数使用整个批进行训练,而没有任何东西用于测试/验证

为方便起见,我引用以下相关代码:

def序列在批次上(自身、x、y、,
样品重量=无,
等级(重量=无):
“”“对单个批数据运行单个渐变更新。”。
#论据
x:训练数据的Numpy数组,
或Numpy数组列表(如果模型有多个输入)。
如果模型中的所有输入都已命名,
你也可以递给我一本字典
将输入名称映射到Numpy数组。
y:目标数据的Numpy数组,
或Numpy阵列列表(如果模型有多个输出)。
如果模型中的所有输出都已命名,
你也可以递给我一本字典
将输出名称映射到Numpy数组。
示例_权重:与x长度相同的可选数组,包含
应用于每个样本的模型损失的权重。
对于时间数据,可以传递二维数组
形状(样本、序列长度),
对每个样本的每个时间步应用不同的权重。
在这种情况下,您应该确保指定
compile()中的sample\u weight\u mode=“temporal”。
类权重:可选字典映射
类索引(整数)到
适用于样品模型损耗的重量(浮子)
在培训期间从本课程中学习。
这有助于告诉模型“更加注意”
来自代表性不足的类的样本。
#返回
标量训练损失
(如果模型只有一个输出且没有指标)
或标量列表(如果模型有多个输出
属性“model.metrics\u names”将为您提供
标量输出的显示标签。
"""
x、 y,样本\权重=自身。\标准化\用户\数据(
x、 y,,
样品重量=样品重量,
等级重量=等级重量,
检查(批次轴=真)
如果self.uses_learning_phase而非isinstance(K.learning_phase(),int):
ins=x+y+样本权重+[1]
其他:
ins=x+y+样本权重
self.\u make\u train\u function()
输出=自列车功能(ins)
如果len(输出)==1:
返回输出[0]
返回输出

感谢您抽出时间。你所说的批量测试是有道理的。(交叉)验证如何?这通常与培训和测试分开进行。此外,如何在批次级别进行有意义的准确性测试?测试一个半训练模型的准确性是没有意义的,因为精度度量的全部目的是确定训练是否有效。换句话说,如何在一个从庞大数据集中一点一点地读取数据的算法中实现精度度量?通常,您希望跟踪测试精度,以检查拟合过度/不足和其他相关问题。在中期这样做当然很奇怪,你通常会在每个时期结束时这样做——如果你的测试集也很大,那么你可以使用批量测试。在某些情况下(如果您