генератор данных keras ничего не печатает - PullRequest
0 голосов
/ 02 апреля 2020

Я внедряю DataGenerator в Керасе. Кажется, это работает хорошо, однако, когда я пытаюсь напечатать что-нибудь с обучением, ничего не получается.

Вот минимальный рабочий пример моего кода:

import tensorflow as tf
import numpy as np
import os
from datetime import datetime

def my_print(s):
    print(s)
    with open('log.log', 'a') as f:
        f.write(str(datetime.now()) + s + '\n')

class DataFeaturesGenerator(tf.keras.utils.Sequence):

    def __init__(self, batch_size=32, n_data=1000):
        self.batch_size = batch_size
        self.n_data = n_data
        self.on_epoch_end()

    def __len__(self):
        'Denotes the number of batches per epoch'
        return int(np.floor(self.n_data / self.batch_size))

    def __getitem__(self, index):
        X = np.random.normal(size=(self.batch_size, 2048))
        y = np.zeros((self.batch_size,2), dtype=np.int)
        return X, y

    def on_epoch_end(self):
        my_print('#'*10)
        my_print('epoch finished')
        my_print('#'*10)

И затем я запускаю его следующим образом:

train_feat_gen = DataFeaturesGenerator()
eval_feat_gen = DataFeaturesGenerator()

n_classes=2
base_model = InceptionV3(include_top=False, weights='imagenet', input_tensor=None, input_shape=None,
pooling='avg')
input_feats = Input(base_model.output_shape[1:])
x = Dense(1024, activation='relu')(input_feats)
predictions = Dense(n_classes, activation='softmax')(x)

shallow_model = Model(inputs=input_feats, outputs=predictions)

shallow_model.compile(loss='categorical_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

history = shallow_model.fit(epochs=30, x=train_feat_gen, validation_data=eval_feat_gen) 
# tried with workers=0 or default, nothing changes. Same for verbose =0, 1 or 2

Эти сообщения печати отображаются для первого вызов (когда я вызываю конструктор в первый раз), но они не появляются во время обучения: вывод такой же, как обычно.

Мне нужно напечатать некоторую информацию для целей отладки. Я уверен, что есть кое-что, что я не принимаю во внимание.

Я использую TensorFlow 2.1.0, поэтому fit_generator устарел, достаточно только fit. Тем не менее, также попробовал это с 2.0.0, 1.15.2 и 1.14.0, но все еще не работает.

my_print функция выполняется только при первом вызове, в конструкторе, во время обучения, ничего не выводится ни на стандартный вывод, ни в файл журнала.

Обновление : запустите весь этот код в Google Colab, и все будет нормально.

Обход : Когда он работал на Google colab, я проверил его версию TensorFlow и установил ее локально: pip install tensorflow==2.2.0-rc2 , и все заработало нормально.

...