用于多维输出的Softmax和损耗函数

2024-10-05 10:21:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Keras创建一个有监督的chess神经网络,它的结构和属性与AlphaZero类似。我有一个GM级国际象棋游戏的大数据集,我用它来训练网络。我的神经网络的输入形状是(m,8,8,119),输出形状是(m,8,8,73),就像AlphaZero一样

我的网络具有与AlphaZero(多个卷积和剩余块)类似的体系结构。问题是,我的神经网络的输出形状是四维的,我不太确定如何使我的网络的最后一层——Softmax层,以及损失函数(可以是SparseCategoricCross熵或CategicCross熵)“处理”四维输出

我需要Softmax在维度1、2和3上求和(所有维度没有样本维度0),而不是一个特定维度。我发现您可以将Keras中的Softmax层作为一个整数列表,而不是一个轴作为axis参数(请参见https://www.tensorflow.org/api_docs/python/tf/keras/layers/Softmax),我尝试使用axis=[1, 2, 3],但是如果这不起作用,请纠正我。对于loss函数,我看到CategoricalCrossentropy loss没有axis参数。至于SparseCategoricalCrossentropy有一个axis参数,但我没有看到整数列表可以作为axis参数传递给它

在我的代码中,我尝试使用CategoricalCrossentropy(每个样本有一个形状为(8,8,73)的热编码标签)和SparseCategoricCrossEntropy(每个样本有一个形状为(3)的标签,指示正确的三个索引),但它们都给出了错误/奇怪的结果(例如:在只训练了10场比赛(有时准确率高达50%)和其他奇怪的结果后,精度非常高),因此我被迫在Softmax层之前展平输入,然后将结果索引转换回原来的三个索引形式,以匹配形状(8、8、73)

如果你有多维问题的解决方案,我将不胜感激


Tags: 函数网络列表参数整数神经网络标签keras

热门问题