Я пытался построить модель с несколькими входами в керасах. Одна входная ветвь будет изображениями, а вторая - метаданными для соответствующих изображений.
Для изображений мне нужна функция генератора, которая будет вводить пакеты изображений. Метаданные представлены в табличной форме.
Теперь мне интересно, как мне передать данные в модель, чтобы правильное изображение было обработано с соответствующей информацией метаданных. Для вашей информации это будет задача регрессии.
Входные данные, которые у меня есть:
Код, который у меня сейчас есть:
функция генератора для изображений:
train_datagen <- image_data_generator(rescale = 1/255)
train_generator <- flow_images_from_dataframe(
dataframe = joined_path_with_metadata,
directory = 'data_dir',
x_col = "path",
y_col = "train",
generator = train_datagen,
target_size = c(150, 150),
batch_size = 20,
color_mode = 'rgb',
class_mode = "sparse"
)
определение модели:
vision_model <- keras_model_sequential()
vision_model %>%
layer_conv_2d(filters = 64,
kernel_size = c(3, 3),
activation = 'relu',
padding = 'same',
input_shape = c(150, 150, 3)) %>%
layer_max_pooling_2d(pool_size = c(2, 2)) %>%
layer_flatten()
# Now let's get a tensor with the output of our vision model:
image_input <- layer_input(shape = c(150, 150, 3))
encoded_image <- image_input %>% vision_model
# ANN for tabular data
tabular_input <- layer_input(shape = ncol(dataframe), dtype = 'float32')
mlp_model <- tabular_input %>%
layer_dense(
units = 16,
kernel_initializer = "uniform",
activation = "relu") # Dropout to prevent overfitting
layer_dropout(rate = 0.1) %>%
layer_dense(
units = 32,
kernel_initializer = "uniform",
activation = "relu") %>%
# concatenate the metadata and the image vector then
# train a linear regression on it
output <- layer_concatenate(c(mlp_model, encoded_image)) %>%
layer_dense(units = 1, activation='linear')
# This is the final model:
vqa_model <- keras_model(inputs = c(image_input, tabular_input), outputs = output)
компилировать:
vqa_model %>% compile(
optimizer = 'adam',
loss = 'mean_squared_error',
metrics = c('mean_squared_error')
)
и последний шаг будет соответствовать модели. Я не уверен, как это сделать, чтобы убедиться, что первый ряд объектов будет принят в качестве метаданных изображений, которые считываются партиями.