使用 Keras/Tensorflow 对神经网络输出进行分组
数据挖掘
神经网络
喀拉斯
张量流
2021-09-28 12:53:46
2个回答
使用keras 功能 API将为您提供所需的东西。
我假设您当前正在使用标准的 keras 顺序模型 API,它更简单,但也将您限制为单个管道。使用函数式 API 时,您确实需要跟踪输入和输出,而不仅仅是定义层。
对于您问题中的示例:
from keras.layers import Input, Dense
from keras.models import Model
# Left side sub-model:
L1 = Input(shape=(2,))
L2 = Dense(2, activation='softmax')(L1)
# Right side sub-model:
R1 = Input(shape=(2,))
R2 = Dense(2, activation='softmax')(R1)
# Combining them together:
merge = concatenate([L2, R2])
# Some additional layers working on the combined layer:
merged_layer_1 = Dense(4, activation='relu')(merge)
# Output Layer:
output = Dense(2, activation='softmax')(hidden1)
# Defining the model:
my_model = Model(inputs=[L1, R1], outputs=output)
层的深度是由组成的,但你应该得到大致的想法。
这是另一个类似于Mark.F 的答案的 Keras 代码片段,但拆分方向相反(从初始输入开始并拆分为两个输出分支,每个分支都有自己的 softmax)。
from keras.layers import Dense, Input, Softmax, Concatenate, concatenate
from keras.models import Model, Sequential
import numpy as np
input_layer = Input(shape=(3,))
middle_layer = Dense(4, activation="sigmoid")(input_layer)
split_one = Dense(2, activation="sigmoid")(middle_layer)
output_one = Softmax()(split_one)
split_two = Dense(2, activation="sigmoid")(middle_layer)
output_two = Softmax()(split_two)
merged = concatenate([output_one, output_two])
model = Model(inputs=input_layer, outputs=merged)
输出的前两个元素是第一个分支的结果,后两个是第二个分支的结果。您还需要在训练时连接两个分支的真实标签。
其它你可能感兴趣的问题