Могут ли данные проверки быть генератором в tenorflow.keras 2.0? - PullRequest
1 голос
/ 31 января 2020

В официальных документах tenorflow.keras ,

validation_data могут быть: кортеж (x_val, y_val) из Numpy массив или тензор кортеж (x_val, y_val, val_sample_weights ) из Numpy набор данных массивов Для первых двух случаев необходимо указать 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 случая. Документы Кераса верны. Поэтому я опубликую проблему в tenorflow.keras для обновления документов.

1 Ответ

2 голосов
/ 31 января 2020

Да, может, странно, что его нет в do c, но он работает точно так же, как аргумент x, вы также можете использовать keras.Sequence или 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 [===== [===== =========================] - 1 с 13 мс / шаг - потеря: 0,6689 - точность: 1,0000 - val_loss: 0,6448 - val_accuracy: 1,0000 Epoch 2 / 100 100/100 [==============================] - 0 с 4 мс / шаг - потеря: 0,6223 - точность: 1,0000 - val_loss: 0.6000 - val_accuracy: 1.0000 Epoch 3/100 100/100 [====================================] - 0s 4ms / шаг - потеря: 0.5792 - точность: 1.0000 - val_loss: 0.5586 - val_accuracy: 1.0000 Epoch 4/100 100/100 [================================ =====] - 0 с 4 мс / шаг - потеря: 0,5393 - точность: 1,0000 - val_loss: 0,5203 - val_accuracy: 1,0000

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...