Keras:模型.fit中的verbose(值为1)显示较少的训练数据

3

我目前使用最新版本的Keras 2.4.2和Tensorflow 2.2.0,使用Movielens-1M数据集(包含100万行)实现了一个简单的矩阵分解模型。然而,我注意到在训练过程中训练数据量会减少。

from sklearn.model_selection import train_test_split
import pandas as pd
import numpy as np
import keras

dataset = pd.read_csv('ratings.dat', skiprows=1,sep='::',names="userId,itemId,rating,timestamp".split(","))

dataset.userId = dataset.userId.astype('category').cat.codes.values
dataset.itemId = dataset.itemId.astype('category').cat.codes.values

train, test = train_test_split(dataset, test_size=0.2)

#model architecture can be found link below

x = [train.userId, train.itemId]
y = train.rating

print(x[0].shape, x[1].shape, y.shape)
history = model.fit(x, y, epochs=25,
                verbose=1, validation_split=0.25)

enter image description here

点击 这里 查看模型结构。

如您所见,训练数据的数量应该是 600124(包括验证集)。但是,进度条显示的值要少得多(18754)。这是怎么回事?

1个回答

4

一切都如预期一样。 18754不是训练数据的数量,而是完成一个epoch所需的步骤数。整个训练数据分成许多组,每组称为一个batch。默认的batch_size为32。这意味着,您的整个训练数据将分为N个组,其中每组包含32个训练数据。

那么N的大小是多少呢?

很简单,步数(N)=总训练数据/ batch_size。

现在你可以自己计算了。

顺便说一下,使用这个batch是因为你的内存有限,无法将整个训练数据加载到GPU内存中。您可以根据内存大小更改批处理大小。


哦,那很有道理。不过应该读一下文档。非常感谢你。 - Kyle_397
不用谢。如果这个回答解决了你的问题,请接受它。 - Nazmul Hasan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接