【发布时间】:2019-03-13 16:51:41
【问题描述】:
我在 Python 2.7 中使用 Keras。我正在制作自己的数据生成器来计算火车的批次。我对基于这个模型的data_generator有一些疑问seen here:
class DataGenerator(keras.utils.Sequence):
def __init__(self, list_IDs, ...):
#init
def __len__(self):
return int(np.floor(len(self.list_IDs) / self.batch_size))
def __getitem__(self, index):
indexes = self.indexes[index*self.batch_size:(index+1)*self.batch_size]
# Find list of IDs
list_IDs_temp = [self.list_IDs[k] for k in indexes]
# Generate data
X, y = self.__data_generation(list_IDs_temp)
return X, y
def on_epoch_end(self):
'Updates indexes after each epoch'
self.indexes = np.arange(len(self.list_IDs))
if self.shuffle == True:
np.random.shuffle(self.indexes)
def __data_generation(self, list_IDs_temp):
#generate data
return X, y
好的,下面是我的几个问题:
你能确认我对函数调用顺序的看法吗?这里是:
- __init__
- loop for each epoc :
- loop for each batches :
- __len_
- __get_item__ (+data generation)
- on_epoch_end
如果您知道调试生成器的方法,我想知道,断点和打印无法使用它..
还有,我的情况很糟糕,但我认为每个人都有问题:
例如,我有 200 个数据(和 200 个标签都可以),例如,我希望批量大小为 64。如果我想得很好,__len_ 将给出 200/64 = 3(而不是 3,125)。所以 1 个 epoch 将用 3 个批次完成?剩下的数据呢?我有一个错误,因为我的数据量不是批量大小的倍数...
第二个例子,我有 200 个数据,我想要一批 256?在这种情况下我必须做什么来调整我的发电机?我考虑过检查 batch_size 是否优于我的数据量,以便为 CNN 提供 1 个批次,但批次不会有预期的大小,所以我认为它会出错?
感谢您的阅读。我更喜欢使用伪代码,因为我的问题更多是关于理论而不是编码错误!
【问题讨论】:
标签: python tensorflow machine-learning keras data-generation