我在 python/Keras 中創(chuàng)建了一個數據生成器,以在 batchesize=5 中提取文件名和標簽。每次迭代都會獲得相同的文件名和標簽。我希望每次迭代都能獲得新的(成功的)文件名和標簽。我查看了許多示例并閱讀了文檔,但無法弄清楚。def datagenerator(imgfns, imglabels, batchsize, mode="train"): while True: images = [] labels = [] cnt=0 while len(images) < batchsize: images.append(imgfns[cnt]) labels.append(imglabels[cnt]) cnt=cnt+1 #for ii in range(batchsize): # #img = np.load(imgfns[ii]) # #images.append(img) # images.append(imgfns[ii]) # labels.append(imglabels[ii]) #for image, label in zip(imgfns, imglabels): # #img = np.load(image) # #images.append(img) # images.append(image) # labels.append(label) print(images) print(labels) print('********** cnt = ', cnt) yield images, labelstrain_gen = datagenerator(train_uxo_scrap, train_uxo_scrap_labels, batchsize=BS)valid_gen = datagenerator(test_uxo_scrap, test_uxo_scrap_labels, batchsize=BS)# train the networkH = model.fit_generator( train_gen, steps_per_epoch=NUM_TRAIN_IMAGES // BS, validation_data=valid_gen, validation_steps=NUM_TEST_IMAGES // BS, epochs=NUM_EPOCHS)這是我得到的輸出示例。您可以看到,每次它通過生成器時,它都會獲取相同的數據?!癊poch 1/10”之后的第一行,有5個文件名。下一行有5個標簽(對應batchsize=5)。例如,您可以在每個輸出中看到第一個文件名是“... 508.npy”等。并且每次迭代的標簽都相同。
1 回答

牛魔王的故事
TA貢獻1830條經驗 獲得超3個贊
問題是您正在設置cnt=0每次迭代。您獲取 5 個文件名,生成它們,然后重復相同的事情,因此您總是獲取前 5 個。您想要更改
def datagenerator(imgfns, imglabels, batchsize, mode="train"):
while True:
images = []
labels = []
cnt=0
到
def datagenerator(imgfns, imglabels, batchsize, mode="train"):
cnt=0
while True:
images = []
labels = []
您還需要確保cnt保持在列表的限制范圍內。所以像
while len(images) < batchsize and cnt < len(imgfns):
# blah
添加回答
舉報
0/150
提交
取消