我的数据生成器没有获取新数据。每次交互只获取相同的数据

我在 python/Keras 中创建了一个数据生成器,以在 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, labels

train_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 network

H = 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)

这是我得到的输出示例。您可以看到,每次它通过生成器时,它都会获取相同的数据。“Epoch 1/10”之后的第一行,有5个文件名。下一行有5个标签(对应batchsize=5)。例如,您可以在每个输出中看到第一个文件名是“... 508.npy”等。并且每次迭代的标签都相同。


哈士奇WWW
浏览 125回答 1
1回答

牛魔王的故事

问题是您正在设置cnt=0每次迭代。您获取 5 个文件名,生成它们,然后重复相同的事情,因此您总是获取前 5 个。您想要更改def datagenerator(imgfns, imglabels, batchsize, mode="train"):&nbsp; while True:&nbsp; &nbsp; images = []&nbsp; &nbsp; labels = []&nbsp; &nbsp; cnt=0到def datagenerator(imgfns, imglabels, batchsize, mode="train"):&nbsp; cnt=0&nbsp;&nbsp;&nbsp; while True:&nbsp; &nbsp; images = []&nbsp; &nbsp; labels = []您还需要确保cnt保持在列表的限制范围内。所以像while len(images) < batchsize and cnt < len(imgfns):&nbsp; # blah
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python