Итак, я попробовал приведенный выше код со случайно сгенерированными данными.Вместо 1 и 0 его 10 и 11
array=np.round(np.random.rand(4010,100))+10 #change in data
train_data = array[:2000]
test_data = array[2000:4000]
train_labels = [1] * 2000
test_labels = [1] * 2000
# Array for prediction check
check_data = [list(item) for item in array[4000:4010]] # 10 correct inputs
check_data.append([10] * 100) # Incorrect data
check_data.append([11] * 100) # Incorrect data
Predicted Output:
array([[1.],
[1.],
[1.],
[1.],
[1.],
[1.],
[1.],
[1.],
[1.],
[1.],
[1.],
[1.]], dtype=float32)
Итак, из этого вы можете сделать вывод, что 0 берется по номиналу.
В нейронных сетях каждый нейрон решает уравнение y = wx + b
, где y: выход нейрона, w = вес, x = вход в нейрон, b = смещение
Когда x = 0, y = b и x = 1, y = w + b
Поэтому, когда вход равен 0, нейрон почти отключается (значения смещения, как правило, очень малы)
Модель не узнает, что все 0 и 1 являются неправильными данными.Выходные данные для всех 0 совпадают, и выходные данные для всех 1 говорят нам, что это совпадение и что-то не так.
Кроме того, ваши данные имеют 0 и 1 с меткой 1, прикрепленной к нему.Вы не можете ожидать, что вы дадите все 1 и все 0 и ожидаете, что модель предскажет это как неправильные данные.