当前位置: 首页 > wzjs >正文

论坛网站建设多少钱软文营销怎么做

论坛网站建设多少钱,软文营销怎么做,刚刚台湾出大事视频,网络营销的常见工具有什么源代码和图解来自鱼书 目录 2层神经网络的类 源代码: 详解: 1. 类的初始化 (__init__) 2. 前向传播 (predict) 3. 损失函数 (loss) 4. 准确率计算 (accuracy) 5. 数值梯度计算 (numerical_gradient) 6. 反向传播计算梯度 (gradient) 总结&#…

源代码和图解来自鱼书

目录

2层神经网络的类

源代码:

详解:

1. 类的初始化 (__init__)

2. 前向传播 (predict)

3. 损失函数 (loss)

4. 准确率计算 (accuracy)

5. 数值梯度计算 (numerical_gradient)

6. 反向传播计算梯度 (gradient)

总结:


2层神经网络的类

源代码:

# coding: utf-8
import sys, os
sys.path.append(os.pardir)  # 为了导入父目录的文件而进行的设定
from common.functions import *
from common.gradient import numerical_gradientclass TwoLayerNet:def __init__(self, input_size, hidden_size, output_size, weight_init_std=0.01):# 初始化权重self.params = {}self.params['W1'] = weight_init_std * np.random.randn(input_size, hidden_size)self.params['b1'] = np.zeros(hidden_size)self.params['W2'] = weight_init_std * np.random.randn(hidden_size, output_size)self.params['b2'] = np.zeros(output_size)def predict(self, x):W1, W2 = self.params['W1'], self.params['W2']b1, b2 = self.params['b1'], self.params['b2']a1 = np.dot(x, W1) + b1z1 = sigmoid(a1)a2 = np.dot(z1, W2) + b2y = softmax(a2)return y# x:输入数据, t:监督数据def loss(self, x, t):y = self.predict(x)return cross_entropy_error(y, t)def accuracy(self, x, t):y = self.predict(x)y = np.argmax(y, axis=1)t = np.argmax(t, axis=1)accuracy = np.sum(y == t) / float(x.shape[0])return accuracy# x:输入数据, t:监督数据def numerical_gradient(self, x, t):loss_W = lambda W: self.loss(x, t)grads = {}grads['W1'] = numerical_gradient(loss_W, self.params['W1'])grads['b1'] = numerical_gradient(loss_W, self.params['b1'])grads['W2'] = numerical_gradient(loss_W, self.params['W2'])grads['b2'] = numerical_gradient(loss_W, self.params['b2'])return gradsdef gradient(self, x, t):W1, W2 = self.params['W1'], self.params['W2']b1, b2 = self.params['b1'], self.params['b2']grads = {}batch_num = x.shape[0]# forwarda1 = np.dot(x, W1) + b1z1 = sigmoid(a1)a2 = np.dot(z1, W2) + b2y = softmax(a2)# backwarddy = (y - t) / batch_numgrads['W2'] = np.dot(z1.T, dy)grads['b2'] = np.sum(dy, axis=0)da1 = np.dot(dy, W2.T)dz1 = sigmoid_grad(a1) * da1grads['W1'] = np.dot(x.T, dz1)grads['b1'] = np.sum(dz1, axis=0)return grads

详解:

这段代码实现了一个两层神经网络 TwoLayerNet,并包含了前向传播、损失计算、准确率计算、梯度计算等功能。我们逐步解释每个部分:

1. 类的初始化 (__init__)

class TwoLayerNet:def __init__(self, input_size, hidden_size, output_size, weight_init_std=0.01):self.params = {}self.params['W1'] = weight_init_std * np.random.randn(input_size, hidden_size)self.params['b1'] = np.zeros(hidden_size)self.params['W2'] = weight_init_std * np.random.randn(hidden_size, output_size)self.params['b2'] = np.zeros(output_size)
  • input_sizehidden_sizeoutput_size 分别是输入层、隐藏层和输出层的神经元数目。
  • 权重 W1W2 是从正态分布中随机初始化的(通过 np.random.randn),偏置 b1b2 被初始化为零。
  • weight_init_std 是一个可选的参数,用于控制权重的初始化标准差。

2. 前向传播 (predict)

def predict(self, x):W1, W2 = self.params['W1'], self.params['W2']b1, b2 = self.params['b1'], self.params['b2']a1 = np.dot(x, W1) + b1z1 = sigmoid(a1)a2 = np.dot(z1, W2) + b2y = softmax(a2)return y
  • 通过 x(输入数据),计算网络的输出:
    1. a1 = np.dot(x, W1) + b1:将输入数据与第一个权重矩阵相乘并加上偏置。
    2. z1 = sigmoid(a1):对 a1 进行 Sigmoid 激活。
    3. a2 = np.dot(z1, W2) + b2:将隐藏层的输出 z1 乘以第二层的权重矩阵并加上偏置。
    4. y = softmax(a2):对第二层的结果应用 Softmax 激活,得到最终的输出概率分布。

3. 损失函数 (loss)

def loss(self, x, t):y = self.predict(x)return cross_entropy_error(y, t)
  • 使用 predict 方法计算网络的输出 y,然后计算输出与真实标签 t 之间的交叉熵损失。交叉熵损失用于评估模型预测的概率分布与实际标签之间的差异。

4. 准确率计算 (accuracy)

def accuracy(self, x, t):y = self.predict(x)y = np.argmax(y, axis=1)t = np.argmax(t, axis=1)accuracy = np.sum(y == t) / float(x.shape[0])return accuracy
  • y = np.argmax(y, axis=1):将每个样本的输出概率向量转化为类别标签(选择概率最大的位置作为预测类别)。
  • t = np.argmax(t, axis=1):将真实标签 t 也转化为类别标签。
  • 计算预测正确的样本比例,即准确率。

5. 数值梯度计算 (numerical_gradient)

def numerical_gradient(self, x, t):loss_W = lambda W: self.loss(x, t)grads = {}grads['W1'] = numerical_gradient(loss_W, self.params['W1'])grads['b1'] = numerical_gradient(loss_W, self.params['b1'])grads['W2'] = numerical_gradient(loss_W, self.params['W2'])grads['b2'] = numerical_gradient(loss_W, self.params['b2'])return grads
  • 通过数值梯度法(numerical_gradient)计算各个参数(权重和偏置)的梯度。
  • loss_W 是由lambda定义的一个匿名函数,计算在给定输入 x 和标签 t 下,损失函数的值。
  • numerical_gradient 用于计算每个参数的梯度,返回一个字典 grads,包含了所有权重和偏置的梯度。在反向传播过程中,numerical_gradient(loss_W, self.params['W1']) 会通过数值方法(有限差分法)计算出 loss(W)W1 的梯度。

6. 反向传播计算梯度 (gradient)

def gradient(self, x, t):W1, W2 = self.params['W1'], self.params['W2']b1, b2 = self.params['b1'], self.params['b2']grads = {}batch_num = x.shape[0]# forwarda1 = np.dot(x, W1) + b1z1 = sigmoid(a1)a2 = np.dot(z1, W2) + b2y = softmax(a2)# backwarddy = (y - t) / batch_numgrads['W2'] = np.dot(z1.T, dy)grads['b2'] = np.sum(dy, axis=0)da1 = np.dot(dy, W2.T)dz1 = sigmoid_grad(a1) * da1grads['W1'] = np.dot(x.T, dz1)grads['b1'] = np.sum(dz1, axis=0)return grads
  • 前向传播: predict 函数中计算出神经网络的输出 y的步骤
  • 反向传播
    • 计算损失对输出层的梯度:dy = (y - t) / batch_num,这是 Softmax 层和交叉熵损失的导数。
    • 更新 W2b2:通过矩阵乘法 np.dot(z1.T, dy) 计算梯度。
    • 计算隐藏层的梯度:da1 = np.dot(dy, W2.T),然后通过 sigmoid_grada1 的梯度进行修正。
    • 更新 W1b1:使用反向传播的链式法则进行计算。

总结:

  • 前向传播 计算神经网络的输出。
  • 损失函数 计算网络预测与实际标签之间的误差。
  • 准确率 计算模型的预测准确性。
  • 数值梯度 通过数值方法估算参数的梯度。
  • 反向传播 计算每一层的梯度,利用链式法则更新权重和偏置。

http://www.dtcms.com/wzjs/117458.html

相关文章:

  • 网站建设费属于什么税目网络营销效果评估
  • 现在没人做网站了百度seo系统
  • 做外贸网站平台百度软件下载
  • 上海网站制作网南宁seo渠道哪家好
  • wordpress建产品目录班级优化大师免费下载学生版
  • 肇庆市专注网站建设平台网络推广工作室
  • 建设网站费用记入什么科目西安网约车平台
  • 网站开发脚本语言网络营销专业毕业论文
  • 复制审查元素做网站优化搜索点击次数的方法
  • 做汽车租赁主要的网站上海百度推广客服电话
  • 做网站推荐关键词排名优化易下拉技术
  • 做一个像美团的网站需要多少钱简单网站建设优化推广
  • 蒙自网站建设购物网站页面设计
  • 防城港网站制作六六seo基础运营第三讲
  • 怎么查看一个网站的浏览量苏州网站建设公司
  • 论述市场营销对网站设计的影响nba交易最新消息汇总
  • 建设银行官网网站首页纪念币预约太原seo团队
  • 网站流量统计代码可以用javascript实现么百度人工服务热线24小时
  • 北京形势紧张无锡seo网站排名
  • 自己做的网站转成二维码发软文的平台
  • 门户网站建设平台佛山百度网站快速排名
  • 做网站的收获及感想免费发布产品信息的网站
  • 重庆璧山网站制作公司电话360seo排名优化服务
  • 长沙私人做网站爱站网站排名查询工具
  • 网站建设推广人员广州营销seo
  • 有做任务赚赏金的网站吗长春seo外包
  • seo网站优化专员百度店铺怎么入驻
  • 网站竞价如何做东莞关键词自动排名
  • 男女做污的事情网站如何建网站赚钱
  • 沧州做网站哪家好华为手机网络营销策划方案