Я пытаюсь создать нейронную сеть с 2 уровнями (1 -е имеет 2 нейрона, 2 -й имеет 1 нейрон), который просматривает список из 4 чисел, и если первые и третьи числа равны 1, то ответ должен быть 1 , в других случаях = 0. < /p>
Я вообще не использую библиотеки Framework, просто случайные, чтобы сделать случайные веса, а Numpy yo - средняя потери квадрата. Я знаю, что если я не устанавливаю семян -рандомизатора, он всегда будет случайным, но мои ответы слишком случайные. < /P>
У меня есть тестовый набор данных, где должен быть первый и последний список 1 и 2 -й и 3 -й - 0: < /p>
x2 = [
[1, 0, 1, 0], # answer: 1
[1, 0, 0, 0], # answer: 0
[0, 1, 1, 0], # answer: 0
[1, 0, 1, 1] # answer: 1
]
< /code>
Но каждый раз, когда я запускаю код, ответ на 1 -й и 2 -й список является более случайным, чем 3 и 4 -е. Иногда ответ на 2 -й больше, чем первым.err3 = y1 - neuron3.activate(pY3)
err1 = y1 - pY1
err2 = y1 - pY2
neuron1.w[k] += x1[k] * numpy.mean(err3 ** 2) * err1 * lr
neuron2.w[k] += x1[k] * numpy.mean(err3 ** 2) * err2 * lr
#(x1 is training dataset, is list index and [k] is list element index)
< /code>
to: < /p>
neuron1.w[k] += x1[k] * numpy.mean(err3 ** 2) * numpy.mean(err1 ** 2) * lr
neuron2.w[k] += x1[i][k] * numpy.mean(err3 ** 2) * numpy.mean(err2 ** 2) * lr
< /code>
Но у меня есть ошибки oveflow.import random
import math
import numpy
class Neuron:
def __init__(self, weightsC):
self.w = []
for i in range(weightsC):
self.w.append(random.random())
def activate(self, x):
return max(0, x)
def predict(self, px):
value = 0
for i in range(len(self.w)):
value += px[i] * self.w[i]
return value
'''def train(self, count, x, y, lr=0.1):
print("\tTraining Start:")
for i in range(count):
print("EPOCH:", i)
for j in range(len(x)):
py = self.predict(x[j])
print("pY:", py)
err = y[j] - self.activate(py)
print("err:", err)
for k in range(len(self.w)):
self.w[k] += err * x[j][k] * lr
print("w[k]", self.w[k])'''
x1 = [
[0, 0, 0, 0],
[1, 0, 1, 0],
[1, 1, 0, 1],
[0, 1, 1, 0],
[1, 1, 0, 0],
[1, 0, 1, 1],
[1, 1, 1, 0]
]
y1 = [0, 1, 0, 0, 0, 1, 1]
x2 = [
[1, 0, 1, 0],
[1, 0, 0, 0],
[0, 1, 1, 0],
[1, 0, 1, 1]
]
pY1 = []
pY2 = []
pY3 = []
if __name__ == "__main__":
lr = 0.001
neuron1 = Neuron(4)
neuron2 = Neuron(4)
neuron3 = Neuron(2)
print("w1 = ", neuron1.w)
print("w2 = ", neuron2.w)
print("w3 = ", neuron3.w)
for l in range(1000):
#print("EPOCH = ", l)
for i in range(len(x1)):
pY1.append(
neuron1.activate(
neuron1.predict(x1[i])
)
)
#print("layer1_pred1 = ", pY1[i])
pY2.append(
neuron2.activate(
neuron2.predict(x1[i])
)
)
#print("layer1_pred2 = ", pY2[i])
layer1_pred = [pY1[i], pY2[i]]
pY3.append(
neuron3.predict(
layer1_pred
)
)
#print("layer2_pred1 = ", pY3[i])
err3 = y1[i] - neuron3.activate(pY3[i])
#print("err3 = ", err3)
for j in range(len(neuron3.w)):
neuron3.w[j] += layer1_pred[j] * numpy.mean(err3 ** 2) * lr
err1 = y1[i] - pY1[i]
#print("err1 = ", err1)
err2 = y1[i] - pY2[i]
#print("err2 = ", err2)
for k in range(len(neuron1.w)):
neuron1.w[k] += x1[i][k] * numpy.mean(err3 ** 2) * err1 * lr
for k in range(len(neuron2.w)):
neuron2.w[k] += x1[i][k] * numpy.mean(err3 ** 2) * err2 * lr
pY1 = pY2 = pY3 = []
print("testing")
for item in x2:
pred1 = neuron1.activate(neuron1.predict(item))
pred2 = neuron2.activate(neuron2.predict(item))
print(neuron3.predict([pred1, pred2]))
Подробнее здесь: https://stackoverflow.com/questions/794 ... -sometimes
Я неправильно разбираюсь в цепей нейронной сети? Предсказания иногда кажутся случайными ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Я неправильно разбираюсь в цепей нейронной сети? Предсказания иногда кажутся случайными
Anonymous » » в форуме Python - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Sslhandshakeexception - Проверка цепей цепочки не удалась, как решить?
Anonymous » » в форуме Android - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-