想象一下,我们有一个班级“NeuralNetwork”
每个神经元由权重,偏差和激活函数组成
class Neuron:
def __init__(self,weights,bias,activation):
self._weights = weights
self._bias = bias
self._activation = activation
def activate(self,input):
return self._activation.compute(self._weights.dot(input)+self._bias)
class Layer:
def __init__(self,neurons):
self._neurons = neurons
def compute(self,input):
output = []
for neuron in self._neurons:
output.append(neuron.activate(input))
return output
class NeuralNetwork:
def __init__(self,layers):
self._layers = layers
def compute(self,input):
output = input
for layer in self._layers:
output = layer.compute(output)
return output
def train(self,dataset):
# do some training
# changes the neurons inside the layers
NeuralNetwork有一个方法train()来改变它的内部表示。 但这意味着可以访问Layer对象的内部。它需要访问单个神经元,违反了demeter的规律。 例如
layers[0].getNeuron(0).compute(input)
layer[0].getNeuron(0).changeBias(2)
我能想到的唯一解决方案是在“Layer”中提供额外的方法并将其委托给神经元。这也允许我使用Layer接口的不同实现。一个更灵活,一个具有更好的性能。
但这看起来很麻烦。是不是有更好的方法来模拟这个?
答案 0 :(得分:0)
第一种可能的解决方案是添加一些委托方法。
从Amr Mostafa的评论中提取的第二个解决方案是通过Layer对象向神经元发送事件。
两种解决方案都允许我们使用不同的Layer对象,该对象由多维数组而不是神经元对象组成(性能考虑)。