我正在使用python和tensorflow,并已从dataframe方法(从kaggle查看开放源代码)创建了一个流,以生成训练和验证datagen。我的问题是,当我运行用于创建test_X的代码时,使用相同的flow_from_dataframe方法创建了test_Y集。
最初,此代码已按照kaggle代码显示的方式工作,但由于某种原因,它似乎对我不起作用。
我检查了许多kaggle内核,其中一些是:
https://www.kaggle.com/digitalchaos666/simple-vgg16/notebook和 https://www.kaggle.com/kmader/attention-on-pretrained-vgg16-for-bone-age
它们都具有相同的代码来解决该问题,但现在似乎无法运行。即使您分叉内核并仅按原样运行代码,而没有进行任何更改,这时它似乎仍会失败
describe file('~/.kube/config') do
it { should exist }
end
答案 0 :(得分:0)
我已经通过为每个生成器创建单独的数据帧解决了我的问题。 train_flow和valid_flow都使用flow_from_dataframe方法,该方法接受种子值。这样,每当我运行代码时,我的训练和验证设置都将是相同的,这是我所需要的。
另一方面,我的test_flows没有输入种子值,因此我为这些对象创建了一个新方法。
train_idg = ImageDataGenerator(zoom_range=0.2,
fill_mode='nearest',
rotation_range=25,
width_shift_range=0.25,
height_shift_range=0.25,
vertical_flip=False,
horizontal_flip=True,
shear_range = 0.2,
samplewise_center=False,
samplewise_std_normalization=False)
val_idg = ImageDataGenerator(width_shift_range=0.25,
height_shift_range=0.25,
horizontal_flip=True)
test_idg = ImageDataGenerator()
####
def flow_from_dataframe(imgDatGen, df, batch_size, seed, img_size):
gc.collect()
gen_img = imgDatGen.flow_from_dataframe(dataframe=df,
x_col='path', y_col='boneage_zscore',
batch_size=batch_size, seed=seed, shuffle=True, class_mode='other',
target_size=img_size, color_mode='rgb',
drop_duplicates=False)
gen_gender = imgDatGen.flow_from_dataframe(dataframe=df,
x_col='path', y_col='gender',
batch_size=batch_size, seed=seed, shuffle=True, class_mode='other',
target_size=img_size, color_mode='rgb',
drop_duplicates=False)
while True:
X1i = gen_img.next()
X2i = gen_gender.next()
gc.collect()
yield [X1i[0], X2i[1]], X1i[1]
####
train_flow = flow_from_dataframe(train_idg, train_df, BATCH_SIZE_TRAIN, SEED, IMG_SIZE)
valid_flow = flow_from_dataframe(val_idg, valid_df, BATCH_SIZE_VAL, SEED, IMG_SIZE)
####
def test_gen_2inputs(imgDatGen, df, batch_size, img_size):
gc.collect()
gen_img = imgDatGen.flow_from_dataframe(dataframe=df,
x_col='path', y_col='boneage_zscore',
batch_size=batch_size, shuffle=False, class_mode='other',
target_size=img_size, color_mode='rgb',
drop_duplicates=False)
gen_gender = imgDatGen.flow_from_dataframe(dataframe=df,
x_col='path', y_col='gender',
batch_size=batch_size, shuffle=False, class_mode='other',
target_size=img_size, color_mode='rgb',
drop_duplicates=False)
while True:
X1i = gen_img.next()
X2i = gen_gender.next()
gc.collect()
yield [X1i[0], X2i[1]], X1i[1]
test_flow = test_gen_2inputs(test_idg, test_df, 789, IMG_SIZE)
male_test_flow = test_gen_2inputs(test_idg, male_df, 789, IMG_SIZE)
female_test_flow = test_gen_2inputs(test_idg, female_df, 789, IMG_SIZE)
此后,以下代码成功运行
train_X, train_Y = next(my_train_flow)
test_X, test_Y = next(test_flow)
male_test_X, male_test_Y = next(male_test_flow)
female_test_X, female_test_Y = next(female_test_flow)