【问题标题】:Creating a single perceptron for training为训练创建单个感知器
【发布时间】:2019-08-19 19:16:44
【问题描述】:

了解感知器的工作原理并尝试从中创建一个函数。

我最近在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

【问题讨论】:

    标签: python python-3.x pandas neural-network jupyter-notebook


    【解决方案1】:

    您需要创建一个通过感知器反向传播并优化权重的方法。

    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$ 是成本函数。

    【讨论】:

      猜你喜欢
      • 2014-11-04
      • 2016-03-02
      • 2021-04-07
      • 2021-09-07
      • 2013-12-23
      • 2013-01-03
      • 2017-05-10
      • 2017-07-16
      • 2023-03-29
      相关资源
      最近更新 更多