Предсказание перцептрона по сумме чисел во входящих секвенциях
Решаю стандартную задачу прогнозирования 0 или 1 по заданной секвенции. Как видно из входных данных, по значению первой позиции определяется выход.
# Perceptorn
# Sample Input Output
# 1 0 0 1 0
# 2 1 1 1 1
# 3 1 0 1 1
# 4 0 1 1 0
import numpy as np
def sigmoid(x):
return 1 / (1 + np.exp(-x))
training_inputs = np.array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]])
training_outputs = np.array([[0, 1, 1, 0]]).T
synaptic_weights = 2 * np.random.random((3, 1)) - 1
print('Weights: \n', synaptic_weights)
Вывод ->
Weights:
[[ 0.47501851]
[-0.81516113]
[ 0.01089572]]
Обучение перцептрона:
for i in range(20000):
input_layer = training_inputs
outputs = sigmoid(np.dot(input_layer, synaptic_weights))
err = training_outputs - outputs
delta = np.dot(input_layer.T, err * (outputs * (1 - outputs)))
synaptic_weights +=delta
print('WEights after training:\n', synaptic_weights)
print('Result, after training:\n', outputs)
Вывод ->
WEights after training:
[[10.38047072]
[-0.20694296]
[-4.98423553]]
Result, after training:
[[0.00679865]
[0.99445483]
[0.99548673]
[0.00553478]]
Предсказание:
# new situation
input_ = np.array([[1, 1, 0]])
output = sigmoid(np.dot(input_, synaptic_weights))
print(output)
Перцептрон справился с задачей и предсказал с вероятностью 0.99996183 что должна быть 1. А как решить задачу с помощью все того же перцептрона, если хочу получать 1 или 0 в зависимости от суммы секвенции. Например (сумма, близкая к 100):
(10, 20, 70) - 1,
(1, 4, 5) - 0,
(100, 0, 0) - 1.
Я подменял разные данные, игрался с количеством эпох, но удовлетворительный результат не получил.