Я внедряю 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
, и все заработало нормально.