如何添加我的神经网络可以预测的每个分类的特定数字?

时间:2019-08-29 15:01:55

标签: machine-learning keras classification lstm multilabel-classification

我有一个np数组,类似于使用0-1进行一次热编码。对于每个样本,我总是有15个零和5个零。我该怎么做才能使其仅预测5个和15个零?我正在使用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个。

2 个答案:

答案 0 :(得分: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'])

答案 1 :(得分:1)

您可以通过严格的培训来做到这一点。重罚任何其他分布的东西。对预测值与准确的5 1秒之间的差异进行较重的惩罚。

您可以通过编写适当的损失函数来完成大部分或全部任务。