Я изучаю нейронную сеть по книге «Искусственные нейронные сети: практический курс», я строил нейронную сеть для упражнения из книги, в книге сказано, что я использую смещение, равное -1, я сделал это, норезультат, который я получил, был неправильным для некоторых входных данных, я не знаю почему, но когда я изменяю смещение на 1 или другое положительное число, я получил правильный ответ для всех входных данных, я думал, что, потому что это число, которое будет обновлятьсяв каждом взаимодействии с весами это не должно происходить, но происходит, я буду очень благодарен, если кто-нибудь поможет мне или попытается помочь мне, извините за мой плохой английский, это мой код:
#!/usr/bin/python3
из случайной формы импорта
input_train = [[-0,6508, 0,1097, 4.0009], [-1,4492, 0,8896, 4,4005], [2,0850, 0,6876, 12,0710], [0,2626, 1,1476, 7,7985], [0,6418,1.0234, 7.0427], [0.2569, 0.6730, 8.3265], [1.1155, 0.6043, 7.4446], [0.0914, 0.3399, 7.0677], [0.0121, 0.5256, 4.6316], [-0.0429, 0.4660, 5.4323], [0.4340, 0.6870, 8,2287], [0,2735, 1,0287, 7,1934], [0,4839, 0,4851, 7,4850], [0,4089, -0,1127, 5,5019], [1,4391, 0,1614, 8,5843], [-0,9115, -0,1973, 2,1962], [0,3654, 1,0475, 7,4858], [0,2144, 0,7515, 7,1699],[0.2013, 1.0014, 6.5489], [0.6483, 0.2183, 5.8991], [-0.1147, 0.2242, 7.2435], [-0.7970, 0.8795, 3.8762], [-1.0625, 0.6366, 2.4707], [0.5307, 0.1285, 5.6883], [-1,2200, 0,7777, 1,7252], [0,3957, 0,1076, 5,6623], [-0,1013, 0,5989, 7,1812], [2,4482, 0,9455, 11,2095], [2,0149, 0,6192, 10,9263], [0.2012,0.2611,5.4631]]
output_train = [-1.0000, -1.0000, -1.0000, 1.0000, 1.0000, -1.0000, 1.0000, -1.0000, 1.0000, 1.0000, -1.0000, 1.0000, -1.0000, -1.0000, -1.000, -1.0000, 1.0000, 1.0000, 1.0000, 1.0000, -1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, -1.0000, -1.0000, 1.0000, -1.0000, 1.0000]
класс персептрон: «Реализация перцептрона: правило Хебба»
def __init__(self, data, output, epoch, bias, learning_rate = 0.01):
self.data = data
self.output = output
self.epoch = epoch
self.bias = bias
self.learning_rate = learning_rate
self.n_samples = len(data)
self.n_atributtes = len(data[0])
self.weights = self.GenWeights()
def train(self):
for epoch in range(self.epoch):
erro = False
for row in range(self.n_samples):
result = self.Predict(self.data[row])
if result is not self.output[row]:
self.bias = self.UpdateBias(result, self.output[row])
for weights in range(self.n_atributtes):
self.weights[weights] = self.UpdateWeights(self.weights[weights], result, self.output[row], self.data[row][weights])
erro = True
if not erro: break
return
def Predict(self, datarow):
sum = self.bias
for ele in range(self.n_atributtes):
sum += datarow[ele] * self.weights[ele]
return 1.0000 if sum >= 0.0 else -1.0000
def UpdateWeights(self, weight, predict, expected, inputc):
return weight + (((expected - predict) * self.learning_rate) * inputc)
def UpdateBias(self, predict, expected):
return self.bias + (((expected - predict) * self.learning_rate) * -1 )
def GenWeights(self):
weights = list()
for atributtes in range(self.n_atributtes):
weights.insert(atributtes, uniform(0, 1))
return weights
def NewEntry(self, newrow):
sum = self.bias
for ele in range(self.n_atributtes):
sum += newrow[ele] * self.weights[ele]
return 1.0000 if sum >= 0.0 else -1.0000
def main ():
first_neural_network = perceptron(input_train, output_train, 1000, -1)
print("Initial Weights : {}" .format(first_neural_network.weights))
first_neural_network.train()
print("Trained Weights : {} and final bias : {} ".format(first_neural_network.weights, first_neural_network.bias))
a = 0
newlist = []
while True:
a = float(input("Enter With the first number : "))
newlist.append(a)
a = float(input("Enter with the second number : "))
newlist.append(a)
a = float(input("Enter with the third number : "))
newlist.append(a)
print(newlist)
print("result is : {0}", format(first_neural_network.NewEntry(newlist)))
newlist.clear()
del first_neural_network
return
if name == " main ": main ()