我正在建立一个神经网络,将多个蓝牙RSSI值分类到某些位置。
例如,这是来自多个蓝牙接收器的标准化RSS输入:
[0.1, 0.6, 0, 0, 0, 0, 0, 0, 0.8, 0.6599999999999999, 0.9, 0.36317567567567566]
这将是输出,将其分类到一个位置:
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
这是模型:
# create model
model = Sequential()
# Input layer has 12 inputs and 24 neurons
model.add(Dense(24, input_dim=12, init='normal', activation='relu'))
# Output layer, has 11 outputs
model.add(Dense(11, init='uniform', activation='sigmoid'))
# Compile model
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
我用3226个训练样本训练网络,然后用263个额外样本进行测试。
在前50个时期之后,训练样本的准确度约为85%。然后,测试样品的准确度约为74%。
但如果继续训练,测试样本的准确度实际上会下降。多50个测试时期将使训练样本的准确率达到88%,测试样本的准确率达到62%。
我尝试了多个目标函数,但结果是一样的:我训练的越多,得到的就越差。
这可能是由于尝试太二元的损失函数造成的吗?
是否存在可用的损失函数,如果正确的类只具有最高值,则可以积极地奖励结果?