第二篇博客,用来整理之前写论文做实验遇到的小问题和解决方法,本文环境为tensorflow-gpu 2.5.0。
由于在实验过程中,需要使用两个输入,一个图像作为输入,一个条件值也作为输入,所以在构建和训练双输入的网络遇到了一些问题。在此记录多输入神经网络模型的构建方法和训练方法。
Keras构建(多输入)网络模型
from tensorflow.keras.layers import Convolution2D, Flatten, Dropout, MaxPooling2D, GlobalAvgPool2D, Dense, Add, Input, Activation, BatchNormalization
from tensorflow.keras.models import Model
inp1 = Input(shape=(1280, 1024, 1), name="img")#第一个输入,图像,名字为'img'
inp2 = Input(shape=(1), name="rate")#第二个输入,条件,名字为'rate'
#卷积层。
out = Convolution2D(4, 3, strides=(2, 2))(inp1)
out = BatchNormalization()(out)
out = Activation('relu')(out)
out = MaxPooling2D(2, 2)(out)
#可加多层卷积
out = GlobalAvgPool2D()(out)#将卷积结果处理为一维数组shape=4
concatted = tf.keras.layers.Concatenate()([out, inp2])#将第二个输入与out拼接起来shape=5
out = Dense(16)(concatted)#全连接层
out = Dense(1)(out)
model = Model(inputs=[inp1, inp2], outputs=out)#inp1和inp2作为输入,输出为out的模型实例化
plot_model(model, to_file='RateCNN.png')#保存网络模型结构图
训练多输入网络模型-使用fit
一般来说训练网络就是model.fit(x=data,y=label,epochs=10);然而多输入时在train_data也只能输入一个变量,我们这里输入的时一个字典格式的结果{img, rate}
history = model.fit(x={img,rate},y=label,epochs=40)
可以开始训练包含多输入的网络模型。