首先需要创建输出列表
model = Model(inpt, [out1, out2, out3])
然后标签也需要多个
model.fit(image, [tar1, tar2, tar3], batch_size=1)
详细代码
import tensorflow as tf
from tensorflow.keras.layers import Conv2D, GlobalAveragePooling2D, Dense
from tensorflow.keras import Model, Input
import numpy as np
#输入图像
image = np.random.normal(size=(1, 5, 5, 3))
tar1 = np.random.normal(size=(1, 3))
tar2 = np.random.normal(size=(1, 3))
tar3 = np.random.normal(size=(1, 3))
inpt = Input(shape=(5, 5, 3))
x = Conv2D(3, 2, padding='same')(inpt)
out1 = GlobalAveragePooling2D(name="out1")(x)
out2 = GlobalAveragePooling2D(name="out2")(x)
out3 = GlobalAveragePooling2D(name="out3")(x)
model = Model(inpt, [out1, out2, out3])
adam = tf.keras.optimizers.Adam(lr = 0.05, epsilon = 0.1)
model.compile(optimizer=adam, loss='mean_squared_error')
model.fit(image, [tar1, tar2, tar3], batch_size=1)
也可以自定义方法
def f(y_true, y_pred):
result = tf.reduce_sum((y_true - y_pred)**2)
return result
adam = tf.keras.optimizers.Adam(lr = 0.05, epsilon = 0.1)
model.compile(optimizer=adam, loss=f)
model.fit(image, [tar1, tar2, tar3], batch_size=1)
当然还有另外一种写法,使用concatenate
out = Concatenate()([out1, out2, out3])
model = Model(inpt, out)
def f(y_true, y_pred):
result = tf.reduce_sum((y_true - y_pred)**2)
return result
adam = tf.keras.optimizers.Adam(lr = 0.05, epsilon = 0.1)
model.compile(optimizer=adam, loss=f)
model.fit(image, np.concatenate([tar1, tar2, tar3], axis=-1), batch_size=1)