Python 在CNN中展平后可以添加数据吗?
我正在与一家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
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函数格式。如果你感兴趣,我可以给你展示一个与你的案例相关的例子