【发布时间】:2019-01-27 11:46:29
【问题描述】:
我正在尝试构建一个接收 3 个输入(图像)和 1 个输出边界框(x0、y0、x1、y1)的网络。该网络由 3 个 VGG16 网络组成,并连接成一层并与 4 个全连接层连接。但是当我尝试将输入发送到网络时,会产生以下错误:
ValueError: Error when checking model input: the list of Numpy arrays that
you are passing to your model is not the size the model expected. Expected
to see 3 array(s), but instead got the following list of 2 arrays:
但我正在向网络发送正确数量的输入。在这里需要建议!提前致谢。
代码:构建网络
vgg_conv_1 = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
vgg_conv_2 = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
vgg_conv_3 = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
merged_layer = Concatenate(axis = 3)([vgg_conv_1.output, vgg_conv_2.output, vgg_conv_3.output])
merged_layer = Flatten()(merged_layer)
merged_layer = Dense(units = 1024, activation = "relu")(merged_layer)
merged_layer = Dense(units = 1024, activation = "relu")(merged_layer)
merged_layer = Dense(units = 1024, activation = "relu")(merged_layer)
merged_layer = BatchNormalization()(merged_layer)
merged_layer = Dropout(0.25)(merged_layer)
merged_layer = Dense(units = 4, activation = "sigmoid")(merged_layer)
newModel = Model([vgg_conv_1.input, vgg_conv_2.input, vgg_conv_3.input], merged_layer)
newModel.compile(optimizer = "sgd", loss = l2loss, metrics = ["accuracy"])
代码:加载数据(训练集和验证集),标签 = (x0, y0, x1, y1)
training_set_1 = []
training_set_2 = []
training_set_3 = []
train_labels = []
with open("train.txt") as f:
for line in f:
lines = line.rstrip("\n")
line_split = lines.split(",")
try:
training_1 = tf.keras.preprocessing.image.load_img(line_split[0], target_size = (224, 224))
x = tf.keras.preprocessing.image.img_to_array(training_1)
x = preprocess(x)
training_set_1.append(x)
training_2 = tf.keras.preprocessing.image.load_img(line_split[1], target_size = (224, 224))
x = tf.keras.preprocessing.image.img_to_array(training_2)
x = preprocess(x)
training_set_2.append(x)
training_3 = tf.keras.preprocessing.image.load_img(line_split[2], target_size = (224, 224))
x = tf.keras.preprocessing.image.img_to_array(training_3)
x = preprocess(x)
training_set_3.append(x)
train_labels.append(np.array([line_split[3],line_split[4],
line_split[5],line_split[6] ]))
except:
pass
代码:培训
traingen = ImageDataGenerator(fill_mode="constant")
valgen = ImageDataGenerator(fill_mode="constant")
newModel.fit_generator( traingen.flow(x = [ np.array(training_set_1),np.array(training_set_2), np.array(training_set_3) ],
y = np.array(train_labels), batch_size = 16),
steps_per_epoch = 8000,
epochs = 10,
validation_data = valgen.flow(x = [ np.array(test_set_1), np.array(test_set_2), np.array(test_set_3) ], y = np.array(test_labels)),
validation_steps = 2000)
【问题讨论】:
标签: python keras deep-learning keras-layer