Java 使用nd4j的Sigmoid导数
我执行的是sigmoid,它工作得很好,但SigmoidEnvivative给出的结果与nd4j中的sigmoid相同。Java 使用nd4j的Sigmoid导数,java,python,python-3.x,numpy,nd4j,Java,Python,Python 3.x,Numpy,Nd4j,我执行的是sigmoid,它工作得很好,但SigmoidEnvivative给出的结果与nd4j中的sigmoid相同。Transforms.sigmoidevirative(x)和Transforms.sigmoidevirative(x,true)之间有什么区别 给出输出: [[ 0.1812, 0.1235, 0.8466]] [[ 0.5452, 0.5308, 0.6999]] [[ 0.5452, 0.5308, 0.6999]]
Transforms.sigmoidevirative(x)
和Transforms.sigmoidevirative(x,true)
之间有什么区别
给出输出:
[[ 0.1812, 0.1235, 0.8466]]
[[ 0.5452, 0.5308, 0.6999]]
[[ 0.5452, 0.5308, 0.6999]]
[[ 0.2480, 0.2490, 0.2101]]
与python的numpy相比:
>>> def sigmoid(x):
... return 1.0 / (1 + np.exp(-x))
...
>>> def sigmoid_derivative(x):
... a = sigmoid(x)
... return a * (1.0 - a)
>>> x = np.array([ 0.1812, 0.1235, 0.8466])
>>> sigmoid(x)
array([0.54517646, 0.53083582, 0.69985343])
>>> sigmoid_derivative(x)
array([0.24795909, 0.24904915, 0.21005861])
Nd4j聚甲醛:
<dependency>
<groupId>org.nd4j</groupId>
<artifactId>nd4j-native-platform</artifactId>
<version>1.0.0-beta3</version>
</dependency>
org.nd4j
nd4j本机平台
1.0.0-beta3
你是对的,无论是转换.sigmoidevirative(x)
还是转换.sigmoidevirative(x,true)
都应该给出相同的结果,这是dl4j中的一个bug。正确的行为有后一种方法。我已经提交了一份解决方案。FYI:sigmoid_导数(x)的实现不正确。它应该是y=sigmoid(x);返回y*(1-y)
nd4j代码也有问题。输出的第三行应该是sigmoidevirative(x)
,与第二行相同,即sigmoid(x)
。Facepalm@WarrenWeckesser你是对的,我的python实现是错的。将我的python代码更正为:>>def sigmoid_导数(x):。。。a=乙状结肠(x)。。。返回a*(1.0-a)
给出输出:数组([0.24795909,0.24904915,0.21005861])
实际更改System.out.println(Transforms.sigmoidevivative(x))
到System.out.println(Transforms.sigmoidevirative(x,true))
给出了预期的sigmoid导数[[0.2480,0.2490,0.2101]]
谢谢!编辑问题
<dependency>
<groupId>org.nd4j</groupId>
<artifactId>nd4j-native-platform</artifactId>
<version>1.0.0-beta3</version>
</dependency>