Новый генератор, который объединяет 2 различных типа входов в fit_generator - PullRequest
1 голос
/ 24 июня 2019

Я хочу создать модель со следующими входами и выходами.
- Вход: изображения и значения
- Выход: значение (регрессия)
Входное изображение считывается с помощью flow_from_dataframe для увеличения.
Ивходное значение загружается из CSV-файла в dataframe.

Я пытаюсь сделать так, чтобы 2 input -> Concatenate -> 1 output.

Но у меня есть проблемы, чтобы он работал с 2различные типы входов.
Может быть, я должен сделать новый генератор ... но я не могу найти способ.

Я ценю любые советы или помощь.

Вот некоторые из моего кода.

train_df = pd.read_csv("train.csv")
test_df = pd.read_csv("test.csv")

file_num = train_df.loc[:,'NUM']
value = train_df.loc[:,'VALUE']

# ------------------------------------------

train_datagen=ImageDataGenerator(rescale=1./255.,
                                 rotation_range=90,
                                 validation_split=0.1)
test_datagen=ImageDataGenerator(rescale=1./255.)

train_img=train_datagen.flow_from_dataframe(
    dataframe=train_df,
    directory="./DATA_train/",
    x_col='NUM',
    y_col='VALUE',
    subset="training",
    batch_size=16,
    seed=4,
    shuffle=True,
    class_mode="other",
    target_size=TARGET_SIZE)
valid_img=train_datagen.flow_from_dataframe(
    dataframe=train_df,
    directory="./DATA_train/",
    x_col='NUM',
    y_col='VALUE',
    subset="validation",
    batch_size=4,
    seed=4,
    shuffle=True,
    class_mode="other",
    target_size=TARGET_SIZE)

test_img=test_datagen.flow_from_dataframe(
    dataframe=test_df,
    directory="./DATA_test/",
    x_col='NUM',
    y_col='VALUE',
    batch_size=1,
    shuffle=False,
    class_mode=None,
    target_size=TARGET_SIZE)

max_val = train_df.loc[:,'VALUE'].max()  
min_val = train_df.loc[:,'VALUE'].min()  
train_val = (train_df.loc[:,'VALUE']-min_val) / (max_val - min_val)

# ------------------------------------------

inputs_image = Input(shape=(64,64,1))
inputs_val = Input(shape=(1,))

x1 = Conv2D(32, (3,3), activation='relu')(inputs_image)
x1 = BatchNormalization()(x1)
x1 = Flatten()(x1)
x1 = Dense(64, activation='relu')(x1)
x1 = Model(inputs=inputs_image, outputs=x1)

x2 = Dense(256, activation='relu')(inputs_mass)
x2 = Dense(64, activation='relu')(x2)
x2 = Model(inputs=inputs_mass, outputs=x2)

combined = layers.concatenate([x1.output,x2.output], axis=-1)
combined = Dense(128, activation='relu')(combined)
outputs = Dense(1, activation='linear')(combined)

model = Model([inputs_image, inputs_val], outputs)

model.compile(optimizer='adam', loss='mean_squared_error', metrics = ['mae'])

# ------------------------------------------

hist = model.fit_generator(generator=train_img,  ## This should be modified..??
                           steps_per_epoch=STEP_SIZE_TRAIN*1,
                           validation_data=valid_img,
                           validation_steps=STEP_SIZE_VALID,
                           epochs = EPOCHS,
                           verbose=1
                          )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...