如何用python原生代码实现神经元?

2022-10-28  本文已影响0人  小黄不头秃

如何用python原生代码实现神经元?

(即:解决一元线性回归模型)

问题:让神经元拟合函数 y = x + 1
(1)构造数据集
# 构造数据集
import numpy as np 
from matplotlib import pyplot as plt

x = np.arange(0,10,0.1) # [0, 0.1, 0.2, 0.3, ..., 9.9]
# 因为现实世界的数据是充满噪声的,我们给数据同时也人工的加入噪声
noise = np.random.normal(0,0.1,100) 
# y = x + 1
y = x + 1 + noise

# 画散点图
fig = plt.figure()
plt.scatter(x,y,s=1)
plt.xlabel("x")
plt.ylabel("y")
plt.show()
(2) 根据步骤编码神经元
  1. 定义function&初始化参数:
    f(x) = wx+b, 让w = 0.1, b = 0.1

  2. 计算 y = f(x):
    然后把 x 带进去, 计算出 y^

  3. 计算loss损失:
    loss = y – y^

  4. 更新参数w,b
    w = w + η * loss
    (η 称之为学习率,可以理解为控制w的更新速度)

  5. if loss>0.1: return (2)

w = 0.1
b = 0.1
learning_rate = 0.01
flag = True # 用作跳出循环的条件
i = 0 # 画图用
loss_history = [] # 画图用

def functions(x):
    return w * x + b

def loss_function(y, y_hat):
    return y - y_hat

# 进行神经网络训练
while flag:
    for x_i, y_i in zip(x,y):
        y_hat = functions(x_i)
        loss = loss_function(y_i, y_hat)
        w = w + learning_rate * loss 
        b = b + learning_rate * loss 

        # 画图用
        loss_history.append(loss)
        i += 1 
        if loss < 0.01: 
            flag = False
            break

print("w =",w,"b =",b)

# 画散点图
fig = plt.figure()
plt.plot(np.arange(i),loss_history)
plt.xlabel("epoch")
plt.ylabel("loss")
plt.show()
(3) 模型预测

我们选取0-49,50个数据进行预测。并将散点图画出来

predct_x = np.arange(0,50)
predct_y = [functions(x_i) for x_i in predct_x]
print(predct_y[1]) # predict = 1 + 1
print(predct_y[2]) # predict = 2 + 1

fig = plt.figure()
plt.scatter(predct_x,predct_y,s=1)
plt.xlabel("x")
plt.ylabel("predict_y")
plt.show()
上一篇下一篇

猜你喜欢

热点阅读