用于多类分类问题的 Keras 输出层,取值范围为 -128 到 127
Posted
技术标签:
【中文标题】用于多类分类问题的 Keras 输出层,取值范围为 -128 到 127【英文标题】:Keras output layer for multiclass classification problem with value range -128 to 127 【发布时间】:2022-01-22 02:24:15 【问题描述】:我有一个 128 个神经元的输入层。两个隐藏层 128 个神经元,每个都具有 relu 激活功能。现在我很难构建我的输出层。您可以将输入值与 mnist 数据集的像素值进行比较。每个输入(128 个数值)都有一个从 -128 到 127 范围内的输出。这个范围内的每个值(-128 到 127)代表一个输出类。我用激活函数 sigmoid 承包了一个 256 的输出层。
我的代码是
model_1 = keras.Sequential([
keras.layers.Dense(128, input_shape=(128,), activation='relu'),
keras.layers.Dropout(.5),
keras.layers.Dense(128, input_shape=(128,), activation='relu'),
keras.layers.Dense(256, input_shape=(128,), activation='sigmoid')
])
model_1.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model_1.fit(X_train, Y_train, epochs=5)
在我的训练数据集中,输入输出都是int8数据类型。但是我收到这样的错误
"INVALID_ARGUMENT: Received a label value of -124 which is outside the valid range of [0, 255). Label values: 44 -26 -120 -73 -84 -21 -123 90 -14 76 -43 -8 72 -94 -78 60 -121 -98 -124 106 -79 72 -2 -79 -116 55 0 6 82 -45 -35 -17"
谁能帮我解决这个问题?我的损失函数有问题吗?如何告诉输出层我的输出类在 -128 到 127 的范围内?
【问题讨论】:
【参考方案1】:注意一面:从损失函数可以看出,模型是分类器,输出层有 255 个神经元,太多了。
输出层的神经元个数必须与标签相同 在(某些情况下)数组的范围(y)
所以当您使用sparse_categorical_crossentropy
时,您应该将类向量转换为二进制类矩阵
to category
【讨论】:
在输出层,需要 256 个神经元,因为我有 256 个类来解决这个特定问题。但是我发现了问题。问题出在我的数据集上。不过谢谢你的评论。以上是关于用于多类分类问题的 Keras 输出层,取值范围为 -128 到 127的主要内容,如果未能解决你的问题,请参考以下文章