Python 在CNN中展平后可以添加数据吗?

Python 在CNN中展平后可以添加数据吗?,python,tensorflow,keras,deep-learning,conv-neural-network,Python,Tensorflow,Keras,Deep Learning,Conv Neural Network,我正在与一家CNN合作,我的教授希望我尝试包含一些相关的信息,但这些信息在图片本身中是不可用的。到目前为止,数据是一维数组。他认为在平坦层之后和致密层之前添加它应该是可能的,但我们两人都还没有足够的知识 model = Sequential() for i, feat in enumerate(args.conv_f): if i==0: model.add(Conv2D(feat, input_shape=x[0].shape, kernel_size=3, paddi

我正在与一家CNN合作,我的教授希望我尝试包含一些相关的信息,但这些信息在图片本身中是不可用的。到目前为止,数据是一维数组。他认为在平坦层之后和致密层之前添加它应该是可能的,但我们两人都还没有足够的知识

model = Sequential()
for i, feat in enumerate(args.conv_f):
    if i==0:
        model.add(Conv2D(feat, input_shape=x[0].shape, kernel_size=3, padding = 'same',use_bias=False))
    else:
        model.add(Conv2D(feat, kernel_size=3, padding = 'same',use_bias=False))
        model.add(BatchNormalization())
        model.add(LeakyReLU(alpha=args.conv_act))
        model.add(Conv2D(feat, kernel_size=3, padding = 'same',use_bias=False))
        model.add(BatchNormalization())
        model.add(LeakyReLU(alpha=args.conv_act))
        model.add(Dropout(args.conv_do[i]))

model.add(Flatten())

#Input code here

denseArgs = {'use_bias':False}
for i,feat in enumerate(args.dense_f):
    model.add(Dense(feat,**denseArgs))
    model.add(BatchNormalization())
    model.add(LeakyReLU(alpha=args.dense_act))
    model.add(Dropout(args.dense_do[i]))
model.add(Dense(1))

很明显,我们可能错了,所以我们非常感谢您的帮助!谢谢

我所知道的一种方法需要使用keras的函数API。 这意味着您必须放弃当前使用的顺序方法

以玩具模型为例,让集团:

img_input = Input((64, 64, 1))
model = Conv2D(20, (5, 5))(img_input)
model = MaxPooling2D((2, 2))(model)

model = Flatten()(model)
是CNN的卷积层,最终变平。 可以通过将最后一个模型层与新信息连接起来来添加信息。新信息可以通过创建一个只包含一个输入层的短模型(这里是af_输入)进行打包

例如:

af_input = Input(shape=(2,))

model = Concatenate()([model, af_input])

model = Dense(120, activation='relu')(model)
model = Dropout(0.1)(model)
model = Dense(100, activation='relu')(model)

predictions = Dense(2)(model)

fullmodel = Model(inputs=[img_input,af_input], outputs=predictions)
所以现在CNN的平坦层的结果将与额外信息的向量连接起来(这里有两个特征)

然后可以像往常一样继续向网络添加层

我建议您检查stackoverflow链接:


另一个例子和一个很好的解释。

我知道的一种方法需要使用keras的函数API。 这意味着您必须放弃当前使用的顺序方法

以玩具模型为例,让集团:

img_input = Input((64, 64, 1))
model = Conv2D(20, (5, 5))(img_input)
model = MaxPooling2D((2, 2))(model)

model = Flatten()(model)
是CNN的卷积层,最终变平。 可以通过将最后一个模型层与新信息连接起来来添加信息。新信息可以通过创建一个只包含一个输入层的短模型(这里是af_输入)进行打包

例如:

af_input = Input(shape=(2,))

model = Concatenate()([model, af_input])

model = Dense(120, activation='relu')(model)
model = Dropout(0.1)(model)
model = Dense(100, activation='relu')(model)

predictions = Dense(2)(model)

fullmodel = Model(inputs=[img_input,af_input], outputs=predictions)
所以现在CNN的平坦层的结果将与额外信息的向量连接起来(这里有两个特征)

然后可以像往常一样继续向网络添加层

我建议您检查stackoverflow链接:


另一个例子和一个很好的解释。

是的,你可以,我建议你使用keras函数格式。如果您感兴趣,我可以向您展示一个与您的案例相关的示例是的,您可以并且我建议您使用keras函数格式。如果你感兴趣,我可以给你展示一个与你的案例相关的例子