91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Keras中fit()和fit_generator()的區別及參數有哪些

發布時間:2022-03-01 10:13:59 來源:億速云 閱讀:610 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“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 = 128
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

這里的生成器函數我產生的是一個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 imdb
from keras.preprocessing.sequence import pad_sequences
from keras.models import Sequential
from keras import layers
import numpy as np
import random
from sklearn.metrics import f1_score,accuracy_score
max_features = 10000
maxlen = 500
batch_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 models
model = 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()的區別及參數有哪些”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岱山县| 读书| 揭阳市| 蚌埠市| 二连浩特市| 盐亭县| 桑植县| 阿尔山市| 珲春市| 紫云| 曲阳县| 阳信县| 吴堡县| 漾濞| 海城市| 宁城县| 三门县| 正定县| 鄂托克旗| 固安县| 张掖市| 弥渡县| 泸定县| 十堰市| 抚远县| 乐亭县| 水城县| 克东县| 昂仁县| 奉贤区| 信宜市| 陵川县| 广州市| 南投县| 高邮市| 甘谷县| 长白| 永年县| 上犹县| 保山市| 峨山|