温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - Could validation data be a generator in tensorflow.keras 2.0?

python - 验证数据可以在tensorflow.keras 2.0中生成吗?

发布于 2020-03-31 23:26:48

tensorflow.keras的正式文件中

validation_data可以是:Numpy数组的元组(x_val,y_val)或Numpy数组数据集的张量元组(x_val,y_val,val_sample_weights)对于前两种情况,必须提供batch_size。对于最后一种情况,可以提供validation_steps。

它没有提到生成器是否可以充当validation_data。所以我想知道validation_data是否可以作为数据生成器?类似于以下代码

net.fit_generator(train_it.generator(), epoch_iterations * batch_size, nb_epoch=nb_epoch, verbose=1,
                  validation_data=val_it.generator(), nb_val_samples=3,
                  callbacks=[checker, tb, stopper, saver])

更新:在keras的正式文件中,内容相同,但又添加了另一句话:

  • 数据集或数据集迭代器

考虑到

数据集对于前两种情况,必须提供batch_size。对于最后一种情况,可以提供validation_steps。

我认为应该有3种情况。Keras的文件是正确的。因此,我将在tensorflow.keras中发布问题以更新文档。

查看更多

提问者
Jingnan Jia
被浏览
171
Orphee Faucoz 2020-01-31 19:47

是的,可以,这很奇怪,它不在文档中,但其工作原理与x参数完全相同,您也可以使用a keras.Sequence或a generator在我的项目中,我经常使用keras.Sequence它,就像发电机一样

最小工作示例,表明它可以工作:

import numpy as np
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense, Flatten

def generator(batch_size): # Create empty arrays to contain batch of features and labels
    batch_features = np.zeros((batch_size, 1000))
    batch_labels = np.zeros((batch_size,1))
    while True:
        for i in range(batch_size):
            yield batch_features, batch_labels

model = Sequential()
model.add(Dense(125, input_shape=(1000,), activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

train_generator = generator(64)
validation_generator = generator(64)

model.fit(train_generator, validation_data=validation_generator, validation_steps=100, epochs=100, steps_per_epoch=100)

100/100 [=============================]-1s 13ms / step-损耗:0.6689-精度:1.0000-val_loss :0.6448-val_accuracy:1.000时间段2/100 100/100 [==============================]-0s 4ms / step -损失:0.6223-准确性:1.000-val损失:0.6000-val_accuracy:1.0000时期3/100 100/100 [========================= ====]-0s 4ms /步-损耗:0.5792-精度:1.0000-val_loss:0.5586-val_accuracy:1.0000时元4/100 100/100 [================= =============]-0s 4ms / step-损耗:0.5393-精度:1.0000-val_loss:0.5203​​-val_accuracy:1.0000