現在横に長い画像をあるきまった区間に区切り,その区間ごとに学習を行おうと思っています.しかし, __len__(self)
の大きさを1以上にしても,__getitem__(self, idx)
のところで各エポックでidx
が1回しか実行されない状況になっています.
やりたいこととして,を各エポックにおいて__len__
で指定した回数分__getitem__
のidx
を変化させ実行したい次第です.
Python
1import keras 2from keras import Sequential 3import numpy as np 4class BatchGenerator(keras.utils.Sequence): 5 def __init__(self,spec,specrange,label,batch_size=128): 6 self.x=spec 7 self.xrange=specrange 8 self.y=label 9 self.length=spec.shape[1] 10 self.batch_size=batch_size 11 self.batch_per_epoch=int(self.length/self.batch_size)+1 12 13 def __getitem__(self, idx): 14 print(idx) 15 st_index=idx*self.batch_size 16 en_index=st_index+self.batch_size 17 place=np.arange(st_index,en_index) 18 x_batch=np.array([self.x[:,self.xrange[i,0]:self.xrange[i,1]] for i in place]) 19 x_batch = x_batch.reshape([x_batch.shape[0], x_batch.shape[1], x_batch.shape[2], 1]) 20 y_batch=self.y[st_index:en_index] 21 22 return x_batch,y_batch 23 24 def __len__(self): 25 return self.batch_per_epoch 26 def on_epoch_end(self): 27 pass 28 29spec=np.zeros((30,10000)) 30specrange=np.array([[0,300],[1,301],...,[10,310]]) # batch_size以上の行数あり 31labelnum=[0,0,...,3] # 計4クラス 32label=keras.utils.to_categorical(labelnum) 33 34gen1=BatchGenerator(spec,specrange,label) 35# gen1をfit_generatorによって学習する
実行環境
Python3.7.6
keras2.3.1
あなたの回答
tips
プレビュー