python - 为训练创建单个感知器
问题描述
学习感知器是如何工作的,并试图从中创建一个功能。
我最近在youtube上观看了一段视频,作为对上述主题的介绍。
现在,我试图模仿他的功能,我想尝试将它应用到示例数据集中:
# x1 x2 y
data = [ [3.5, 1.5, 1],
[2.0, 1.0, 0],
[4.0, 1.5, 1],
[3.0, 1.0, 0],
[3.5, 0.5, 1],
[2.0, 0.5, 0],
[5.5, 1.0, 1],
[1.0, 1.0, 0],
[4.5, 1.0, 1] ]
data = pd.DataFrame(data, columns = ["Length", "Width", "Class"])
Sigmoid函数:
def sigmoid(x):
x = 1 / (1 + np.exp(-x))
return x
感知器功能:
w1 = np.random.randn()
w2 = np.random.randn()
b = np.random.randn()
def perceptron(x1,x2, w1, w2, b):
z = (w1 * x1) + (w2 * x2) + b
return sigmoid(z)
我的问题是如何在感知器中添加成本函数并根据参数循环 n 次以使用成本函数调整权重?
def get_cost_slope(b,a):
"""
b = predicted value
a = actual value
"""
sqrerror = (b - a) ** 2
slope = 2 * (b-a)
return sqrerror, slope
解决方案
您需要创建一个通过感知器反向传播并优化权重的方法。
def optimize( a , b ):
sqrerror = (b - a) ** 2
cost_deriv = 2 * (b-a)
sigmoid_deriv = z * ( 1 - z ) # derivative of sigmoid function
learning_rate = 0.001 # Used to scale the gradients
w1 -= ( cost_deriv * sigmoid_deriv * x1 ) * learning_rate # Gradient Descent update rule
w2 -= ( cost_deriv * sigmoid_deriv * x2 ) * learning_rate
b -= ( cost_deriv * sigmoid_deriv ) * learning_rate
自从 ,
其中$J$ 是成本函数。
推荐阅读
- azure - ADConnect 同步移动规则
- html - Chrome 的“保存密码”功能将用户名放在不相关的字段中
- python - 如何在 Python 中创建不同大小的滑动窗口?
- php - 如何修复 Uncaught SyntaxError: Unexpected token :
- python - 找不到文件,文件不存在 (jpg)
- c# - 在 C# 中创建自定义任务窗格获取无法创建指定的 ActiveX 控件运行时错误
- azure - 如何在 azure window 10 update 1809 虚拟机中启用 tpm 自动配置?
- java - 如何在其余 api 控制器上捕获文件以及使用 Postman 发送文件的方法
- python - IPython 启动脚本已永久更改 Jupyter Notebooks 行为
- linux - AWK - 如何列匹配文件 A 中的多个匹配项 匹配文件 B 中的一个