将值合并为全连接层的附加输入

问题描述

我有一个图像数据集以及方向信息。我想将此方向信息作为附加信息添加到完全连接的层。我也尝试了以下代码

def build_model(inp_shape=(35,35,3),vector_shape=(1,)):

    base_model = keras.Sequential()

    base_model.add(keras.layers.Conv2D(32,3,activation="relu",input_shape=inp_shape))

    base_model.add(keras.layers.Batchnormalization())
    base_model.add(keras.layers.MaxPooling2D((2,2)))
    base_model.add(keras.layers.Dropout(0.25))

    base_model.add(keras.layers.Conv2D(64,activation="relu"))
    base_model.add(keras.layers.Batchnormalization())
    base_model.add(keras.layers.MaxPooling2D((2,2)))
    base_model.add(keras.layers.Dropout(0.25))

    base_model.add(keras.layers.GlobalAveragePooling2D(data_format='channels_last'))

    base_model.add(keras.layers.Dense(128,activation="relu"))
    base_model.add(keras.layers.Batchnormalization())
    base_model.add(keras.layers.Dropout(0.5))

    vector_model = keras.Sequential()
    vector_model.add(keras.layers.Dense(1,activation='relu',input_shape=vector_shape))

    model = keras.layers.concatenate([base_model,vector_model],axis=-1)
    model.add(keras.layers.Dense(4,activation='softmax'))

    model.summary()
    return model

但这会导致以下错误

ValueError: Layer concatenate_3 was called with an input that isn't a symbolic tensor. Received type: <class 'keras.engine.sequential.Sequential'>. Full input: [<keras.engine.sequential.Sequential object at 0x000001FAbed0F208>,<keras.engine.sequential.Sequential object at 0x000001FAB056A308>]. All inputs to the layer should be tensors.

这是因为我将输入内容提供给模型的方式如下吗?

model = build_model(inp_shape=data_shape,vector_shape=vector_shape)

model.compile(loss='categorical_crossentropy',optimizer=keras.optimizers.Adam(),metrics=["accuracy"])

history = model.fit_generator(training_generator,steps_per_epoch=len(x_train) // batch_size,epochs=num_epochs,shuffle=True,callbacks=callbacks,validation_data=(x_val,y_val))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)