Я пробовал свои силы в нейронных сетях, и ниже приведен простой пример, который использует сигмовидную функцию для вывода 1 (или числа, действительно близкого), если число нечетное, и 0, если число четное. После обучения нейронной сети вывод правильный. Когда вводятся новые значения, вывод равен нулю. Почему выходной ноль?
import numpy as np
inputs = np.array([9, 45, 62, 87, 88, 49])
outputs = np.array([1, 1, 0, 1, 0, 1]) # 1 for odd 0 for even
weights = np.random.random(()) # weights are initialized as random.
lr = 0.1 # learning rate
mw = np.dot(inputs, weights)
def sigmoid(x, deriv=False):
if deriv == True:
return sigmoid(x) * (1 - sigmoid(x)) # derivative of sigmoid
else:
return 1 / (1 + np.exp(-x))
z = sigmoid(mw)
print("Results before training: {}".format(z))
# Results before backpropagation with random value as weight
for x in range(20000): # training loop
error = (z - outputs)
adjustments = sigmoid(z, deriv=True) * error * inputs
weights = weights - lr * adjustments
# readjusting the weights to minimize error
# After the training loop with the readjusted weights
new_mw = (weights * inputs)
new_z = sigmoid(new_mw) # sigmoid of new weights * input
print("New results after training:{}".format(new_z)) # -> [1, 1, 0, 1, 0, 1]
def think(x, weights):
print("New situation: {}".format(x))
xw = np.dot(x, weights)
print("New results after thinking: {}".format(sigmoid(xw)))
x = np.array([2, 4, 6, 7, 17, 53]) #array of new test data
think(x, weights) # -> 0.0