Keras train_on_batch()不训练模型vs fit()

时间:2019-03-02 22:17:03

标签: python keras

我的数据集太大,无法容纳在RAM上,因此我选择使用train_on_batch逐步训练模型。 为了测试这种方法是否有效,我从一部分大数据中进行了一些初步测试。

但是,我在训练模型时遇到了一些问题,即在使用train_on_batch()进行训练时,模型的精度停留在10%。使用fit()时,在40个历元时我的准确度为95%。我也尝试过fit_generator()并遇到类似的问题。

使用fit()

results = model.fit(x_train,y_train,batch_size=128,nb_epoch=40)

使用train_on_batch()

#386 has been chosen so that each batch size is 128
splitSize = len(y_train) // 386

for j in range(20):
    print('epoch: '+str(j)+' ----------------------------')
    np.random.shuffle(x_train)
    np.random.shuffle(y_train)
    xb = np.array_split(x_train,386)
    yb = np.array_split(y_train,386)
    sumAcc = 0
    index = list(range(386))
    random.shuffle(index)
    for i in index:
        results = model.train_on_batch(xb[i],yb[i])
        sumAcc += results[1]
    print(sumAcc/(386))

1 个答案:

答案 0 :(得分:0)

您使用的随机播放是不正确的,因为随机播放之后y_train与x_train不匹配。当您像这样随机播放时,每个数组都以不同的顺序随机播放。 您可以使用:

length = x_train.shape[0]
idxs = np.arange(0, length)
np.random.shuffle(idxs)

x_train = x_train[idxs]
y_train = y_train[idxs]