本文搬运自 简书
原作者:牧世

1、多输出模型

使用keras函数式API构建网络:

# 输入层
inputs = tf.keras.layers.Input(shape=(64,64,3))

# 卷积层及全连接层等相关层
x = tf.keras.layers.Dense(256, activation=tf.nn.relu)(inputs)

# 多输出,定义两个输出,指定名字标识
fc_a=tf.keras.layers.Dense(name='fc_a',units=CLASS_NUM,activation=tf.nn.softmax)(x)
fc_b=tf.keras.layers.Dense(name='fc_b',units=CLASS_NUM,activation=tf.nn.softmax)(x)
# 单输入多输出
model = tf.keras.Model(inputs=inputs, outputs=[fc_a, fc_b])

# 目标函数定义,需与输出层名字对应
losses = {'fc_a': 'categorical_crossentropy',
          'fc_b': 'categorical_crossentropy'}

model.compile(optimizer=tf.train.AdamOptimizer(),
                loss=losses,
                metrics=['accuracy'])

2、自定义loss函数

def loss_a(y_true, y_pred):
    return tf.keras.losses.categorical_crossentropy(y_true, y_pred)

def loss_b(y_true, y_pred):
    return tf.keras.losses.meas_squared_error(y_true, y_pred)

losses = {'fc_a': loss_a,
          'fc_b': loss_b}

model.compile(optimizer=tf.train.AdamOptimizer(),
                loss=losses,
                metrics=['accuracy'])
最后修改:2022 年 03 月 24 日
如果觉得我的文章对你有用,请随意赞赏