gpt4 book ai didi

python - 在 TensorFlow 模型中的每一行上使用 softmax 激活输出矩阵

转载 作者:太空宇宙 更新时间:2023-11-04 09:26:40 25 4
gpt4 key购买 nike

我正在构建一个 TensorFlow (2.0) 模型,该模型将图像(30x100 矩阵)作为输入并希望能够具有以下形式的输出(和标签)

[
[0.0, 0.3, 0.7, 0.0],
[1.0, 0.0, 0.0, 0.0],
[0.2, 0.2, 0.4, 0.2]
]

即每一行都有一个单独的 softmax 激活,这意味着它们总和为 1。在训练数据中,每行中只有一个元素为 1,其余为 0,我相信这被称为 one-hot 编码。因此我的问题是;如何配置最后一层(和损失函数)以在我的标签上进行单热编码?

最佳答案

它看起来是多标签分类的变体。为了方便起见,我们可以连接 3 个 softmax 层的输出并使用二元交叉熵损失。对于预测,我们可以 reshape 连接的输出。

工作代码

inputs = Input(shape=(2,))
output = Dense(4, activation='relu')(inputs)

output_1 = Dense(4, activation='softmax')(output)
output_2 = Dense(4, activation='softmax')(output)
output_3 = Dense(4, activation='softmax')(output)

# concatenate the outputs
output = concatenate([output_1, output_2, output_3], axis=1)

model = Model(inputs=inputs, outputs=output)
model.compile(loss='binary_crossentropy', optimizer='adam')

# Two training examples each of 2 features
x = np.array([[1,2],
[2,1]])

# Output labels
y = np.array([[[0,0,0,1],[0,0,1,0],[0,1,0,0]],
[[0,0,1,0],[0,0,1,0],[0,0,0,1]]])

# Fatten the y per sample to match the model output shape
model.fit(x, y.reshape(len(x), -1))

# Predications
y_hat = model.predict(x)
y_hat = y_hat.reshape(len(x),-1,4)

print (y_hat)

输出:

array([[[0.0418521 , 0.63207364, 0.06171123, 0.26436302],
[0.54364955, 0.19503883, 0.09884372, 0.16246797],
[0.06045745, 0.09223039, 0.7325132 , 0.11479893]],

[[0.05648099, 0.40420422, 0.12369599, 0.41561884],
[0.64175993, 0.14215547, 0.07769462, 0.13838997],
[0.07918497, 0.1764104 , 0.57678604, 0.1676186 ]]], dtype=float32)

您还可以使用 y_hat.sum(axis=2)

验证每一行总和是否为 1

关于python - 在 TensorFlow 模型中的每一行上使用 softmax 激活输出矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57322100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com