Как настроить нейронную сеть так, чтобы она имела на выходе только 0 или 1? - PullRequest
0 голосов
/ 02 июня 2019

У меня есть набор данных (в нем 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-0366931-ee-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.0627.7699-02 -1.06276069e-02 -1.06276069e-02-1.062760694e-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.9616-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-023844531775754e-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.706116e-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.5895574803 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,53932872e-02 1,53932872e-02 1,53932872e-02-13939872e-0202]]

Но мне нужно было получить что-то вроде:

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

Ответы [ 2 ]

0 голосов
/ 02 июня 2019

Ваш вывод в порядке.Нейронная сеть для двоичной классификации не возвращает "чистых" целочисленных выходных данных.Хороший двоичный классификатор - это модель, которая предсказывает этот вектор с горячим кодированием:

[0, 1]

как:

[0.00001, 0.99999]

Если вы поместите слой softmax вснизу вы можете интерпретировать эти значения как «вероятность быть 0 или 1».

0 голосов
/ 02 июня 2019

Для двоичного результата вам нужна функция активации сигмоида.Softmax обеспечивает число между (0,1), которое может быть легко преобразовано в двоичное предсказание.

Для мультиклассовой классификации

Если в вашей задаче классификации более двух классов, в вашем последнем слое должно быть столько нейронов, сколько их классов.Функция активации по-прежнему будет сигмовидной, однако вам нужно будет использовать softmax поверх результата последнего слоя, чтобы получить фактические классы в качестве прогноза

...