如何添加我的 NN 可以预测的每个分类的特定数字?
Posted
技术标签:
【中文标题】如何添加我的 NN 可以预测的每个分类的特定数字?【英文标题】:How can I add specific numbers of each classification that my NN can predict? 【发布时间】:2020-01-02 21:28:39 【问题描述】:我有一个类似于 0-1 的单热编码的 np 数组。对于每个样本,我总是有 15 个 0 和 5 个 1。我该怎么做才能让它只预测 5 个 1 和 15 个 0?我正在使用 keras 库,是否有可以应用的设置,以便我的模型必须准确预测 15 个零和 5 个?
-
输入示例 = [0 0 0 1 0 1 0 0 1 0 0 1 0 0 0 1 0 0 0 0]
#Building RNN
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Dropout
regressor = Sequential()
regressor.add(LSTM(units = 50, return_sequences = True, input_shape = (X_train.shape[1],20)))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(LSTM(units = 50))
regressor.add(Dropout(0.2))
regressor.add(Dense(units = 20, activation='sigmoid'))
# Compiling RNN
regressor.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
我希望我的模型始终预测 15 个零和 5 个一。
【问题讨论】:
【参考方案1】:您也可以尝试定义根据您的格式返回的自定义损失函数
def custom_loss(y_true, y_pred):
# calculate binary_crossentropy and reshape the result according your need
...
return K.variable(...)
regressor.compile(loss=custom_loss, optimizer='adam', metrics=['accuracy'])
【讨论】:
【参考方案2】:您可以通过严格的培训来做到这一点。严厉惩罚任何有任何其他分布的东西。尝试对预测与恰好 5 1
s 之间的差异进行更重的惩罚。
您可以通过编写适当的损失函数来完成大部分或全部操作。
【讨论】:
以上是关于如何添加我的 NN 可以预测的每个分类的特定数字?的主要内容,如果未能解决你的问题,请参考以下文章
R语言非参数方法:使用核方法和K-NN(k近邻算法)分类预测心脏病数据
详解pytorch中的交叉熵损失函数nn.BCELoss()nn.BCELossWithLogits(),二分类任务如何定义损失函数,如何计算准确率如何预测