【发布时间】:2020-08-27 04:45:29
【问题描述】:
基本上,我想要一个生成器,它在每个时期重新读取魔术方法 _len__ 以重新计算该时期将完成多少批次。
这是一段sn-p代码:
import tensorflow as tf
import numpy as np
class GeneratorFile(tf.keras.utils.Sequence):
def __init__(self, file_list):
self.file_list = file_list
self.desired_file = self.file_list[0]
print('This should be file 1:', self.desired_file)
def __len__(self):
if self.desired_file == 'file1':
return 2
else:
return 3
def on_epoch_end(self):
self.desired_file = self.file_list[1]
print('This should be file 2:', self.desired_file)
def __getitem__(self, item):
return np.zeros((16, 1)), np.zeros((16,))
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(1, input_dim=1, activation="softmax"))
model.compile(
optimizer='Adam',
loss='binary_crossentropy',
metrics=['accuracy']
)
model_file_train = ['file1', 'file2']
generator_train = GeneratorFile(model_file_train)
model.fit(generator_train, epochs=2, initial_epoch = 0)
在 len 魔术方法中,我想在文件发生更改时切换该 epoch 中的批次数,它在第一个 epoch 结束时进行。但是,目前, len 在训练过程开始时运行一次,然后再也不会运行。有什么可以改变的吗?
【问题讨论】:
-
您使用的 tensorflow 版本是什么?你能把 print 语句放在 len 函数中,看看它是运行一次还是每个 epoch 运行一次?我尝试使用 1.15.2 和 2.2.0,并且每个时期都调用了 len 函数。
标签: python tensorflow machine-learning keras