小编Gui*_*fay的帖子

带整流线性单元的反向传播

我已经编写了一些代码来实现具有逻辑激活函数和softmax输出的深度神经网络中的反向传播.

def backprop_deep(node_values, targets, weight_matrices):
    delta_nodes = node_values[-1] - targets
    delta_weights = delta_nodes.T.dot(node_values[-2])
    weight_updates = [delta_weights]
    for i in xrange(-2, -len(weight_matrices)- 1, -1):
        delta_nodes = dsigmoid(node_values[i][:,:-1]) * delta_nodes.dot(weight_matrices[i+1])[:,:-1]
        delta_weights = delta_nodes.T.dot(node_values[i-1])
        weight_updates.insert(0, delta_weights)
    return weight_updates
Run Code Online (Sandbox Code Playgroud)

代码运行良好,但当我切换到ReLU作为激活功能时,它停止工作.在backprop例程中,我只更改激活函数的导数:

def backprop_relu(node_values, targets, weight_matrices):
    delta_nodes = node_values[-1] - targets
    delta_weights = delta_nodes.T.dot(node_values[-2])
    weight_updates = [delta_weights]
    for i in xrange(-2, -len(weight_matrices)- 1, -1):
        delta_nodes = (node_values[i]>0)[:,:-1] * delta_nodes.dot(weight_matrices[i+1])[:,:-1]
        delta_weights = delta_nodes.T.dot(node_values[i-1])
        weight_updates.insert(0, delta_weights)
    return weight_updates
Run Code Online (Sandbox Code Playgroud)

然而,网络不再学习,并且权重很快变为零并保持在那里.我完全难过了.

python numpy backpropagation neural-network

5
推荐指数
1
解决办法
2451
查看次数

在python类上定义算术运算

我试图找出是否有可能在python类上定义算术运算。我想做些什么:

class a():
    @classmethod
    def __add__(cls, other):
        pass

a + a
Run Code Online (Sandbox Code Playgroud)

但是,我当然知道:

TypeError: unsupported operand type(s) for +: 'type' and 'type'

这样的事情有可能吗?

python python-3.x

2
推荐指数
1
解决办法
81
查看次数