Я новичок в нейронных сетях и тому подобном, и, возможно, я выбрал для этого трудный первый проект (в Python). Я пытался написать код, который мог бы использовать в будущем и для других целей. Я понял, как я буду распространяться через последний набор весов и смещений, используя правило производной цепочки, чтобы найти ошибку между этими весами и стоимостью (еще не реализовал это в коде), но я не совсем понимаю, как Я бы продвинулся дальше назад.
Могу ли я использовать правило цепочки, чтобы найти связь между весами дальше в сети, или я бы сделал что-то еще.
def __init__(self, structure):
weight_shapes = [(a,b) for a,b in zip(structure[1:],structure[:-1])]
self.weights = [np.random.standard_normal(s)/s[1]**.5 for s in weight_shapes]
self.biases = [np.zeros((s,1)) for s in structure[1:]]
self.structure = structure
self.hiddenNeuronOutputs = []
self.errors = []
@staticmethod
def sigmoid(x):
return 1 / (1 + (np.exp(-x)))
@staticmethod
def sigmoidDerivative(x):
return 1 - (1 / (1 + (np.exp(-x))))
@staticmethod
def cost(expectedOutputs,recievedOutputs,numberOfPiecesOfData):
total = 0
for i in range(numberOfPiecesOfData):
squared_error = ((expectedOutputs[i] - recievedOutputs[i]) ** 2)/numberOfPiecesOfData
total += squared_error
return total
def forwardPropergate(self, a):
for w,b in zip(self.weights,self.biases):
a = self.sigmoid(np.matmul(w,a) + b)
self.hiddenNeuronOutputs.append(a)
return a
def backPropergate(self,expectedOutputs,recievedOutputs,dataPerChunk):
pass
Это мой код, если вам интересно.