使用数据片段对keras进行培训

时间:2019-07-31 20:16:01

标签: python tensorflow keras neural-network training-data

我使用默认设置和仅1个历元来训练keras(python)中的顺序模型(20个密集层)。 所有层都通过relu激活,除了最后一层使用Sigmoid。

方法A:

具有1,000,000条带标签的训练数据记录的馈送模型。

方法B:

  1. 具有50,000条记录的火车模型
  2. 保存模型
  3. 做点事
  4. 加载保存的模型
  5. 再训练50,000条记录
  6. 重复直到使用完所有1,000,000条记录

为什么上述两种方法之间存在差异?

与分组使用相比,一次使用所有数据总是会获得更高的准确性。

这是什么原因?

model = Sequential()
model.add(Dense(30, input_dim = 27, activation = 'relu'))
...
model.add(Dense(1, input_dim = 10, activation = 'sigmoid'))
model.compile(loss = 'binary_crossentropy', optimizer = 'sgd', metrics = ['accuracy'])
model.load_weights(PreviousWeightsFile)
model.fit(X, Y, verbose = 0)
model.save_weights(WeightsFile)
(exit python and do some stuff)

2 个答案:

答案 0 :(得分:1)

在文档中,这里是您问题的关键模型参数

  

initial_epoch:整数。开始训练的时期(对   恢复以前的训练)。

  

纪元:整数。训练模型的时期数。纪元是   对提供的整个x和y数据进行迭代。注意在   与initial_epoch结合使用,将epochs理解为“最终   epoch”。该模型未经过以下给出的多次迭代训练   时代,但直到到达索引时代为止。

您没有使用这些参数,因此您正在覆盖自己的体重,并且没有像使用epochs参数那样恢复训练。这就是为什么您的模型始终使用方法B表现较差的原因。

答案 1 :(得分:0)

对于所有数据,特征和由此产生的反向传播之间的相互作用对于所有现有数据将更加准确;这样可以使功能和模型的体系结构建立在其他时代之上。

保存并重新加载时,基本上可以重新启动它。