我尝试在python中实现一个ReLU神经元,而不使用ANN模块。我对用ReLU活化求损失函数的导数有点困惑。你知道吗
我试过用谷歌搜索这个,但我只找到了一个完整网络的实现,所以没有帮助。你知道吗
这是我的密码: (请注意,对于偏差和权重,我们有单独的变量)
def relu(x):
return np.maximum(x, 0)
def relu_derivative(y):
return 1. * (y > 0)
class NeuronReLU:
def __init__(self, w=None, b=0):
self.w = w
self.b = b
def activate(self, x):
return relu(np.dot(x, self.w) + self.b)
def forward_pass(self, x):
n = x.shape[0]
y_pred = np.zeros((n, 1))
y_pred = self.activate(x)
return y_pred.reshape(-1, 1)
def backward_pass(self, x, y, y_pred, learning_rate=0.005):
n = len(y)
y = np.array(y).reshape(-1, 1)
delta_w = ...
delta_b = ...
self.w -= learning_rate * delta_w
self.b -= learning_rate * delta_b
def fit(self, x, y, num_epochs=300):
if self.w is None:
self.w = np.zeros((x.shape[1], 1))
self.b = 0
Loss_values = []
for i in range(num_epochs):
y_pred = self.forward_pass(x)
Loss_values.append(Loss(y_pred, y))
self.backward_pass(x, y, y_pred)
return Loss_values
所以问题是我不知道如何计算偏导数。我有两个选择:
第一(不使用relu()和relu_导数()):
if np.dot(x, w) + b > 0:
delta_w = (np.dot(X.T, (y_pred - y)) / n)
delta_b = np.mean(y_pred - y)
else:
delta_w = 0
delta_b = 0
我需要检查一下吗np.dot公司(x,w)+b>;0 elementwise或use.all()?你知道吗
第二(使用relu()和relu_导数()):
delta_w = (relu_derivative(y_pred) * (y_pred - y))
delta_b = ?
在我看来,我们的relu\u导数()是一个变量的函数,所以它没有偏导数。而且relu_导数(y_pred)和(y_pred-y)是向量,所以delta_w有不同的维数。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐