千家信息网

Keras中fit()和fit_generator()的区别及参数有哪些

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本文小编为大家详细介绍"Keras中fit()和fit_generator()的区别及参数有哪些",内容详细,步骤清晰,细节处理妥当,希望这篇"Keras中fit()和fit_generator()的
千家信息网最后更新 2026年11月01日Keras中fit()和fit_generator()的区别及参数有哪些

本文小编为大家详细介绍"Keras中fit()和fit_generator()的区别及参数有哪些",内容详细,步骤清晰,细节处理妥当,希望这篇"Keras中fit()和fit_generator()的区别及参数有哪些"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

1、fit和fit_generator的区别

首先Keras中的fit()函数传入的x_train和y_train是被完整的加载进内存的,当然用起来很方便,但是如果我们数据量很大,那么是不可能将所有数据载入内存的,必将导致内存泄漏,这时候我们可以用fit_generator函数来进行训练。

下面是fit传参的例子:

history = model.fit(x_train, y_train, epochs=10,batch_size=32,                     validation_split=0.2)

这里需要给出epochs和batch_size,epoch是这个数据集要被轮多少次,batch_size是指这个数据集被分成多少个batch进行处理。

最后可以给出交叉验证集的大小,这里的0.2是指在训练集上占比20%。

fit_generator函数必须传入一个生成器,我们的训练数据也是通过生成器产生的,下面给出一个简单的生成器函数:

batch_size = 128def generator():    while 1:        row = np.random.randint(0,len(x_train),size=batch_size)        x = np.zeros((batch_size,x_train.shape[-1]))        y = np.zeros((batch_size,))        x = x_train[row]        y = y_train[row]        yield x,y

这里的生成器函数我产生的是一个batch_size为128大小的数据,这只是一个demo。如果我在生成器里没有规定batch_size的大小,就是每次产生一个数据,那么在用fit_generator时候里面的参数steps_per_epoch是不一样的。

这里的坑我困惑了好久,虽然不是什么大问题

下面是fit_generator函数的传参:

history = model.fit_generator(generator(),epochs=epochs,steps_per_epoch=len(x_train)//(batch_size*epochs))

2、batch_size和steps_per_epoch的区别

首先batch_size = 数据集大小/steps_per_epoch的,如果我们在生成函数里设置了batch_size的大小,那么在fit_generator传参的时候,,steps_per_epoch=len(x_train)//(batch_size*epochs)

我得完整demo代码:

from keras.datasets import imdbfrom keras.preprocessing.sequence import pad_sequencesfrom keras.models import Sequentialfrom keras import layersimport numpy as npimport randomfrom sklearn.metrics import f1_score,accuracy_scoremax_features = 10000maxlen = 500batch_size = 32(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)x_train = pad_sequences(x_train,maxlen=maxlen)x_test = pad_sequences(x_test,maxlen=maxlen) def generator():    while 1:        row = np.random.randint(0,len(x_train),size=batch_size)        x = np.zeros((batch_size,x_train.shape[-1]))        y = np.zeros((batch_size,))        x = x_train[row]        y = y_train[row]        yield x,y# generator() model = Sequential()model.add(layers.Embedding(max_features,32,input_length=maxlen))model.add(layers.GRU(64,return_sequences=True))model.add(layers.GRU(32))# model.add(layers.Flatten())# model.add(layers.Dense(32,activation='relu')) model.add(layers.Dense(1,activation='sigmoid'))model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['acc'])print(model.summary()) # history = model.fit(x_train, y_train, epochs=1,batch_size=32, validation_split=0.2)history = model.fit_generator(generator(),epochs=1,steps_per_epoch=len(x_train)//(batch_size))  print(model.evaluate(x_test,y_test))y = model.predict_classes(x_test) print(accuracy_score(y_test,y))

补充:model.fit_generator()详细解读

如下所示:

from keras import modelsmodel = models.Sequential()

首先

利用keras,搭建顺序模型,具体搭建步骤省略。完成搭建后,我们需要将数据送入模型进行训练,送入数据的方式有很多种,models.fit_generator()是其中一种方式。

具体说,model.fit_generator()是利用生成器,分批次向模型送入数据的方式,可以有效节省单次内存的消耗。

具体函数形式如下:

fit_generator(self, generator, steps_per_epoch, epochs=1, verbose=1, callbacks=None, validation_data=None, validation_steps=None, class_weight=None, max_q_size=10, workers=1, pickle_safe=False, initial_epoch=0)

参数解释:

generator:一般是一个生成器函数;

steps_per_epochs:是指在每个epoch中生成器执行生成数据的次数,若设定steps_per_epochs=100,这情况如下图所示;

epochs:指训练过程中需要迭代的次数;

verbose:默认值为1,是指在训练过程中日志的显示模式,取 1 时表示"进度条模式",取2时表示"每轮一行",取0时表示"安静模式";

validation_data, validation_steps指验证集的情况,使用方式和generator, steps_per_epoch相同;

models.fit_generator()会返回一个history对象,history.history 属性记录训练过程中,连续 epoch 训练损失和评估值,以及验证集损失和评估值,可以通过以下方式调取这些值!

acc = history.history["acc"]val_acc = history.history["val_acc"]loss = history.history["loss"]val_loss = history.history["val_loss"]

读到这里,这篇"Keras中fit()和fit_generator()的区别及参数有哪些"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

数据 函数 生成 训练 生成器 参数 大小 方式 内存 文章 模型 模式 过程 验证 内容 情况 损失 时候 次数 步骤 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中智农互联网科技 云信互联网科技有限公司 中关村互联网科技集团 厦门中拓互联网络科技有限公司 疫情对互联网科技公司影响 腾讯阿里互联网科技 没上市的科技互联网公司 上海挚品互联网科技 互联网科技视频 互联网科技缩写 融贸通互联网科技 新华互联网科技2019 知域互联网科技有限公司大骗子 互联网与医疗科技 国大互联网教育科技有限公司工作 乌鲁木齐新华智原互联网科技学校 长沙茂晟互联网科技有限公司 群盈汇互联网科技有限公司 兰石爱特工业互联网科技分公司 张家口科技产业互联网平台 百单网互联网科技有限公司怎么样 广东猪兼强互联网科技有限公司 互联网与科技金融数据 互联网与新科技 九亚互联网科技 大白互联网科技 中盈科技互联网信息有限公司 成都铂石互联网科技做什么的 迪庆互联网科技招生 米泉互联网科技专业怎么样
0