如何建立一个神经网络,使其仅输出0或1?

时间:2019-06-02 13:22:10

标签: python deep-learning

我有一个数据集(有10000行):

      0     1     2       3      4     ...   53      54      55        56     57
 0  10309   0  402.64  263.65  134.99  ...  0.39  263.65  134.99  401.833548   0
 1  10310   0  398.64  263.65  134.99  ...  0.39  263.65  134.99  401.833548   0
 2  10311   0  398.64  263.65  134.99  ...  0.39  263.65  134.99  401.833548   0
 3  10312   0  398.64  263.65  134.99  ...  0.39  263.65  134.99  401.833548   0
 4  10313   0  403.64  263.65  134.99  ...  0.39  263.65  134.99  401.833548   0

我必须建立一个神经网络来预测第1列的值(可以是0或1)。

我创建了一个两层神经网络。

model = Sequential()
model.add(Dense(128, activation='relu', input_shape=(x_train.shape[1],)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse', metrics=['mae'])

得到一个输出:

  

[[-1.57625228e-03 1.61733944e-04 -1.49833616e-02 1.79843791e-03     -2.96636093e-02 -6.63164817e-03 -9.47585609e-03 5.64101897e-03      5.64101897e-03 -1.29007865e-02 5.64101897e-03 3.58308945e-03     -9.53195766e-02 -1.32898521e-02 5.22762071e-04 4.18396108e-03     -2.88559217e-02 -2.44860705e-02 -1.18804779e-02 7.53945857e-02     -2.02486850e-03 -2.17353478e-02 -7.60783181e-02 -5.02919555e-02      7.87826702e-02 -3.26374844e-02 6.09703511e-02 3.32313627e-02      1.42815514e-02 3.70703414e-02 5.64101897e-03 9.96760353e-02     -2.02211499e-01 -1.06276069e-02 -1.71094477e-01 6.36711642e-02     -9.27114673e-03 -8.05514529e-02 -1.24936230e-01 -9.09972191e-02     -9.61129889e-02 -9.41279978e-02 -9.14852545e-02 -1.23843096e-01     -4.96111661e-02 -7.75326695e-03 -3.41935158e-02 -6.24957904e-02     -3.43749672e-03 -6.50173202e-02 7.04494305e-04 -6.82023242e-02     -6.80137798e-02 -5.75559661e-02 3.78455073e-02 -4.41458300e-02     -3.51775438e-02 -1.93608720e-02 -7.32456967e-02 -5.12493961e-03     -3.92356515e-02 -3.91514003e-02 -5.93186915e-03 -7.00767413e-02     -4.91175205e-02 -3.92843783e-02 -1.70611106e-02 -6.61014542e-02     -1.65037028e-02 -3.93037796e-02 -3.91289964e-02 -1.61894206e-02     -3.40123251e-02 -2.89186090e-03 3.31846252e-03 -5.55966273e-02      3.67479622e-02 -6.71871677e-02 -1.06477588e-01 -1.19096853e-01      3.82361114e-02 -5.07725924e-02 3.69399088e-03 4.46796566e-02     -2.69809160e-02 3.70123982e-02 1.08064897e-03 -3.58955748e-03      8.01469535e-02 7.87181482e-02 -4.26483620e-03 4.88822088e-02      1.59037113e-02 5.56310862e-02 1.58798099e-02 1.58805288e-02     1.58808343e-02 -2.12251153e-02 1.56732872e-02 1.39700407e-02]]

但是我必须得到类似的东西:

  

0 0 0 0 1 0 0 0 0 ... 0 0 0 0 1 0 0 0 1

2 个答案:

答案 0 :(得分:0)

对于二进制结果,您需要S型激活函数。 Softmax提供介于(0,1)之间的数字,可以轻松将其转换为二进制预测。

用于多类分类

如果您的分类问题有两个以上的类,则最后一层需要具有与类数一样多的神经元。激活函数仍然是S形的,但是您需要在最后一层的结果之上使用softmax来获得实际的类作为预测

答案 1 :(得分:0)

您的输出很好。用于二进制分类的神经网络不会返回“干净”的整数输出。一个好的二进制分类器是一个可以预测此一键编码矢量的模型:

[0, 1]

为:

[0.00001, 0.99999]

如果在底部放置 softmax 层,则可以将这些值解释为“概率为0或1”。