单层神经网络代码与讲解
神经网络原理:
简单的来说神经网络就是通过梯度下降来达到目的的一种算法。
其公式为:
递归函数:
这函数是神经网络的逻辑函数
(w的维度为(n,1)在单层神经网络中n一般等于输入值个数)
(
为激活函数)
损失函数:
神经网络的学习过程就是不断的进行梯度下降来获取权重参数的过程,学习过程就是以该损失函数为基准,找出能使它的值达到最小的权重函数。损失函数还是前向传播的终点也是反向传播的起点,损失函数将预测的输出值与实际输出值进行运算,得出的结果越小,训练模型越好。
成本函数:
成本函数的目的是求解w,b使得全局的J(w,b)最小。
python代码部分(以下函数并不能直接拿来用,还需根据自己的需求进行更改):
引用相应的库:
import numpy as np
初始化w,b:
def initialize_with_zeros(dim):"""这个函数用于初始化权重数组w和偏置/阈值b.参数:dim -- w的大小,看上面的神经网络模型图可知,dim在本例中是12288,因为一个特征输入对应一个权重。返回值:w -- 权重数组b -- 偏置bias"""w = np.zeros((dim,1))b = 0return w, b
进行前向传播与反向传播:
def propagate(w, b, X, Y):"""参数:X -- 输入值,Y -- 输入值对应的标签,返回值:cost -- 成本dw -- w的梯度db -- b的梯度"""m = X.shape[1]# 前向传播A = U(np.dot(w.T, X) + b) #U代表激活函数,需要自己设定 cost = -np.sum(Y*np.log(A) + (1-Y)*np.log(1-A)) / m # 反向传播dZ = A - Ydw = np.dot(X,dZ.T) / mdb = np.sum(dZ) / m# 将dw和db保存到字典里面grads = {"dw": dw,"db": db}return grads, cost
进行梯度下降;
def optimize(w, b, X, Y, num_iterations, learning_rate, print_cost = False):""" 参数:num_iterations -- 循环次数learning_rate -- 学习率print_cost -- 为True时,每优化50次就把成本cost打印出来,以便我们观察成本的变化返回值:params -- 优化后的w和bcosts -- 每优化50次,将成本记录下来,成本越小,表示参数越优化"""costs = []for i in range(num_iterations): grads, cost = propagate(w, b, X, Y) # 计算得出梯度和成本# 从字典中取出梯度dw = grads["dw"]db = grads["db"]# 进行梯度下降,更新参数,使其越来越优化,使成本越来越小w = w - learning_rate * dwb = b - learning_rate * db# 将成本记录下来if i % 50 == 0:costs.append(cost)if print_cost:print ("优化%i次后成本是: %f" %(i, cost))params = {"w": w,"b": b}return params, costs
以上工具函数数便已经准备好了,那么便可以将其整合成主函数:
def model(X_train, Y_train, num_iterations = 自己设定, learning_rate =自己设定 , print_cost = False):""" 参数:X_train -- 训练输入值Y_train -- 训练输入值对应的标签num_iterations -- 优化多少次learning_rate -- 学习率print_cost -- 为True时,每优化50次就把成本cost打印出来,以便我们观察成本的变化返回值:d -- 返回一些信息"""# 初始化待训练的参数w, b = initialize_with_zeros(X_train.shape[0])# 使用训练数据来训练/优化参数parameters, costs = optimize(w, b, X_train, Y_train, num_iterations, learning_rate, print_cost)# 从字典中分别取出训练好的w和bw = parameters["w"]b = parameters["b"]
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
