Я работаю над проблемой регрессии. Мой CNN тренируется на данных, которые имеют форму 32x513x30 - 32 экземпляра 513x30 на партию, а затем 4810 партий.
У меня есть эти партии, сохраненные в каталоге, каждый с именем "batch # number.npy".
Во время использования генератора Python я продолжаю получать предупреждение от TensorFlow:
ВНИМАНИЕ: tenorflow: использование генератора с
use_multiprocessing=True
и несколько рабочих могут дублировать ваши данные. Пожалуйста, рассмотрите возможность использования классаkeras.utils.Sequence
.
Я понял, как загрузить их с помощью генератора Python. Однако при использовании многопроцессорной обработки рекомендуется использовать класс Seras Keras: https://www.tensorflow.org/api_docs/python/tf/keras/utils/Sequence
К сожалению, там все становится слишком сложно для меня. Вот код, который я использовал:
def batch_gen(num):
os.chdir('mydirectory/train')
for n in num:
placeholder = np.load('batch#' + str(n) + '.npy')
X = placeholder[:,:513,:]
Y1= placeholder[:,513:,:]
Y = X * Y1
X = X / normalization # normalize X
X = scale_mag*X.astype(np.float32)
Y = Y / normalization
Y = scale_mag*Y.astype(np.float32)
X = np.reshape(X,(32,513,30,1))
Y = np.reshape(Y,(32,513,30,1))
yield (X, Y)
my_gen = batch_gen(C) # C is an array with indexes 1 to 4810 (looped by number of training epochs)
Способ, которым я использую генератор, заставляет мои данные дублироваться во время тренировки? Если так, как я мог бы перевести его в класс Sequence?
Спасибо.
class MyBatchGenerator(Sequence):
def __init__(self, C):
self.C = C
def __len__(self):
return len(self.C)
def __getitem__(self, n):
os.chdir('mydirectory/train')
placeholder = np.load('batch#' + str(n) + '.npy')
X = placeholder[:,:513,:]
Y1= placeholder[:,513:,:]
Y = X * Y1
X = X / normalization # normalize X
X = scale_mag*X.astype(np.float32)
Y = Y / normalization
Y = scale_mag*Y.astype(np.float32)
X = np.reshape(X,(32,513,30,1))
Y = np.reshape(Y,(32,513,30,1))
return (X, Y)