python - Python 神经网络中不需要的 [Nan] 输出
问题描述
新手在这里。刚刚从 JS 切换到 Python 以构建神经网络,但从中获得了 [Nan] 输出。
奇怪的是我的 sigmoid 函数。似乎没有遇到任何溢出,但导数会导致混乱。
import numpy as np
def sigmoid(x):
return x*(1-x)
return 1/(1 + np.exp(-x))
#The function- 2
def Sigmoid_Derivative(x):
return x * (1-x)
Training_inputs = np.array([[0,0,1],
[1,1,1],
[1,0,1],
[0,1,1]])
Training_outputs = np.array([[0, 1, 1, 0]]).T
np.random.seed(1)
synaptic_weights = np.random.random((3, 1)) - 1
print ("Random starting synaptic weight:")
print (synaptic_weights)
for iteration in range(20000):
Input_Layer = Training_inputs
Outputs = sigmoid(np.dot(Input_Layer, synaptic_weights))
erorr = Training_outputs - Outputs
adjustments = erorr * Sigmoid_Derivative(Outputs)
synaptic_weights += np.dot(Input_Layer.T, adjustments)
# The print declaration----------
print ("Synaptic weights after trainig:")
print (synaptic_weights)
print ("Outputs after training: ")
print (Outputs)
这是错误消息。我不知道为什么它会溢出,因为权重似乎足够小。顺便说一句,由于我是新手,请用简单的 python 给出解决方案:--
Random starting synaptic weight:
[[-0.582978 ]
[-0.27967551]
[-0.99988563]]
/home/neel/Documents/VS-Code_Projects/Machine_Lrn(PY)/tempCodeRunnerFile.py:10: RuntimeWarning: overflow encountered in multiply
return x * (1-x)
Synaptic weights after trainig:
[[nan]
[nan]
[nan]]
Outputs after training:
[[nan]
[nan]
[nan]
[nan]]
解决方案
您的代码至少有两个问题。
首先是在你的函数中莫名其妙地使用了 2 条return
语句sigmoid
,这应该只是:
def sigmoid(x):
return 1/(1 + np.exp(-x))
它给出了x=0
(0.5) 的正确结果,并且对于大 1 变为 1 x
:
sigmoid(0)
# 0.5
sigmoid(20)
# 0.99999999793884631
你的(错误的)乙状结肠:
def your_sigmoid(x):
return x*(1-x)
return 1/(1 + np.exp(-x))
很容易导致溢出:
your_sigmoid(20)
# -380
另一个问题是您的衍生产品是错误的;它应该是:
def Sigmoid_Derivative(x):
return sigmoid(x) * (1-sigmoid(x))
请参阅Math.SE上的 sigmoid 函数线程的导数,以及此处的讨论。
推荐阅读
- xml - 如何在使用 @XmlRootElement 进行 XML 编组时设置编组器属性
- spring-boot - Webflux Webclient 未设置 Content-Range 标头
- web - 如何从 Google Identity Aware Proxy 后面的 Web 应用程序访问已通过身份验证的用户?
- c# - 在 C# 中为原始类型创建包装器的最佳方法是什么?
- java - 如何关闭一个 URL log4j 的日志记录
- c# - Asp.net core 3.1 保护 API 和 Web 应用程序
- javascript - 导出 json 分隔在多个文件中
- automation - 清理调查数据,需要为 100 的响应创建新变量,有没有快速的方法?
- reactjs - 在webview react native中使用其组件时无法访问reactjs功能
- sql - 来自两个查询的 SQL 百分比