【发布时间】:2019-11-10 08:23:27
【问题描述】:
我有一个自定义文件,其中包含我的所有图像及其标签的路径,我使用以下方法将其加载到数据框中:
MyIndex=pd.read_table('./MySet.txt')
MyIndex 有两列感兴趣的 ImagePath 和 ClassName
接下来我进行一些训练测试拆分并将输出标签编码为:
images=[]
for index, row in MyIndex.iterrows():
img_path=basePath+row['ImageName']
img = image.load_img(img_path, target_size=(299, 299))
img_path=None
img_data = image.img_to_array(img)
img=None
images.append(img_data)
img_data=None
images[0].shape
Classes=Sample['ClassName']
OutputClasses=Classes.unique().tolist()
labels=Sample['ClassName']
images=np.array(images, dtype="float") / 255.0
(trainX, testX, trainY, testY) = train_test_split(images,labels, test_size=0.10, random_state=42)
trainX, valX, trainY, valY = train_test_split(trainX, trainY, test_size=0.10, random_state=41)
images=None
labels=None
encoder = LabelEncoder()
encoder=encoder.fit(OutputClasses)
encoded_Y = encoder.transform(trainY)
# convert integers to dummy variables (i.e. one hot encoded)
trainY = to_categorical(encoded_Y, num_classes=len(OutputClasses))
encoded_Y = encoder.transform(valY)
# convert integers to dummy variables (i.e. one hot encoded)
valY = to_categorical(encoded_Y, num_classes=len(OutputClasses))
encoded_Y = encoder.transform(testY)
# convert integers to dummy variables (i.e. one hot encoded)
testY = to_categorical(encoded_Y, num_classes=len(OutputClasses))
datagen=ImageDataGenerator(rotation_range=90,horizontal_flip=True,vertical_flip=True,width_shift_range=0.25,height_shift_range=0.25)
datagen.fit(trainX,augment=True)
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
batch_size=128
model.fit_generator(datagen.flow(trainX,trainY,batch_size=batch_size), epochs=500,
steps_per_epoch=trainX.shape[0]//batch_size,validation_data=(valX,valY))
我面临的问题是一次性加载的数据太大而无法放入当前的机器内存中,因此我无法使用完整的数据集。
我尝试使用数据生成器,但不想遵循它遵循的目录约定,也无法消除扩充部分。
问题是有没有办法从磁盘加载批次以确保两个规定的条件。
【问题讨论】:
-
您的示例缺少
Sample的来源 -
示例只是包含一些信息以及图像的类名
-
您可以只将 Classes 视为 @AKX 的类列表