位置: IT常识 - 正文

mlp原来是这么回事(mlp是啥啊)

编辑:rootadmin
mlp原来是这么回事

推荐整理分享mlp原来是这么回事(mlp是啥啊),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mlp/meme,mlp是啥啊,mlp是什么的缩写,mlp是啥啊,mlp是什么意思骂人,mlp网络用语是什么意思,mlp网络用语是什么意思,mlp是啥啊,内容如对您有帮助,希望把文章链接给更多的朋友!

开篇先告诉自己一件事,nerf用的是最快的relu激活,因为relu没有梯度消失现象,所以快,

至于这种现象的解释请看下图(还有elu和prelu这两个梯度保留的更好,nerf跑一跑?嘻嘻!):

ok,开始谈谈mlp,mlp实际上就是一个拥有多层神经网络的所谓多层感知机,感知机都是用来分类的

 由上图可知mlp最大的作用就是可以实现非线性的分类,而为什么可进行非线性分类,就是因为这个隐藏层进行了空间的转换,也就是我前一篇博客说的为了实现非线性必须要的操作。

mlp缺点也挺多的,速度慢算一个,难怪nerf跑得这么慢 ,给一个转载自其他人博客的mlp代码在这:

from __future__ import print_function, division import numpy as np import math from sklearn import datasets   from mlfromscratch.utils import train_test_split, to_categorical, normalize, accuracy_score, Plot from mlfromscratch.deep_learning.activation_functions import Sigmoid, Softmax from mlfromscratch.deep_learning.loss_functions import CrossEntropy   class MultilayerPerceptron():     """Multilayer Perceptron classifier. A fully-connected neural network with one hidden layer.     Unrolled to display the whole forward and backward pass.     Parameters:     -----------     n_hidden: int:         The number of processing nodes (neurons) in the hidden layer.      n_iterations: float         The number of training iterations the algorithm will tune the weights for.     learning_rate: float         The step length that will be used when updating the weights.     """     def __init__(self, n_hidden, n_iterations=3000, learning_rate=0.01):         self.n_hidden = n_hidden         self.n_iterations = n_iterations         self.learning_rate = learning_rate         self.hidden_activation = Sigmoid()         self.output_activation = Softmax()         self.loss = CrossEntropy()       def _initialize_weights(self, X, y):         n_samples, n_features = X.shape         _, n_outputs = y.shape         # Hidden layer         limit   = 1 / math.sqrt(n_features)         self.W  = np.random.uniform(-limit, limit, (n_features, self.n_hidden))         self.w0 = np.zeros((1, self.n_hidden))         # Output layer         limit   = 1 / math.sqrt(self.n_hidden)         self.V  = np.random.uniform(-limit, limit, (self.n_hidden, n_outputs))         self.v0 = np.zeros((1, n_outputs))       def fit(self, X, y):           self._initialize_weights(X, y)           for i in range(self.n_iterations):               # ..............             #  Forward Pass             # ..............               # HIDDEN LAYER             hidden_input = X.dot(self.W) + self.w0             hidden_output = self.hidden_activation(hidden_input)             # OUTPUT LAYER             output_layer_input = hidden_output.dot(self.V) + self.v0             y_pred = self.output_activation(output_layer_input)               # ...............             #  Backward Pass             # ...............               # OUTPUT LAYER             # Grad. w.r.t input of output layer             grad_wrt_out_l_input = self.loss.gradient(y, y_pred) * self.output_activation.gradient(output_layer_input)             grad_v = hidden_output.T.dot(grad_wrt_out_l_input)             grad_v0 = np.sum(grad_wrt_out_l_input, axis=0, keepdims=True)             # HIDDEN LAYER             # Grad. w.r.t input of hidden layer             grad_wrt_hidden_l_input = grad_wrt_out_l_input.dot(self.V.T) * self.hidden_activation.gradient(hidden_input)             grad_w = X.T.dot(grad_wrt_hidden_l_input)             grad_w0 = np.sum(grad_wrt_hidden_l_input, axis=0, keepdims=True)               # Update weights (by gradient descent)             # Move against the gradient to minimize loss             self.V  -= self.learning_rate * grad_v             self.v0 -= self.learning_rate * grad_v0             self.W  -= self.learning_rate * grad_w             self.w0 -= self.learning_rate * grad_w0       # Use the trained model to predict labels of X     def predict(self, X):         # Forward pass:         hidden_input = X.dot(self.W) + self.w0         hidden_output = self.hidden_activation(hidden_input)         output_layer_input = hidden_output.dot(self.V) + self.v0         y_pred = self.output_activation(output_layer_input)         return y_pred     def main():     data = datasets.load_digits()     X = normalize(data.data)     y = data.target       # Convert the nominal y values to binary     y = to_categorical(y)       X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, seed=1)       # MLP     clf = MultilayerPerceptron(n_hidden=16,         n_iterations=1000,         learning_rate=0.01)       clf.fit(X_train, y_train)     y_pred = np.argmax(clf.predict(X_test), axis=1)     y_test = np.argmax(y_test, axis=1)       accuracy = accuracy_score(y_test, y_pred)     print ("Accuracy:", accuracy)       # Reduce dimension to two using PCA and plot the results     Plot().plot_in_2d(X_test, y_pred, title="Multilayer Perceptron", accuracy=accuracy, legend_labels=np.unique(y))   if __name__ == "__main__":     main()

mlp原来是这么回事(mlp是啥啊)

这里的隐藏层是全连接层,因为这个隐藏层要换x的空间肯定是要作用于全部的x上,在卷积网络上也有全连接层但那个和这个的意思不太一样(全连接只是表示这一层于上一层所有神经元都连接了,根据各个神经元的参数不同,全连接层的作用自然也是不同的),卷积里的是用来分类,

 这里全连接层的神经元是激活函数(可能有点语义表达错误和sigmoid那些应该不一样,刚看了一下是一样的,因为前一层神经元要先经过全连接层处理,然后经过激活函数处理,使用就是由激活函数判断它是否激活某个条件,我看Alex net用的是relu激活(这个函数在同样数据下激活态会多一点,我觉得可能是因为非饱和,值的范围比较大导致的,不过relu在梯度下降方面表现的似乎不错,先不管这个了))。

你如果前一层的神经元和权重的组合达到了一定的条件,那么这一层的某些神经元就会被激活(达到激活函数的条件了),最后的输出层只要把这些激活的东西拼在一起看是什么就行(当然这个拼起来的结果在数学上的表示是一个抽象值,这点我在之前的博客说过,得到了这个值就可以把它和我训练出来的猫的决策分界的值进行对比,就可以知道是不是猫了)。

有人跟我说全连接的输出维度如果小于输入维度(他称这个为隐层,我觉得和隐藏层的概念不同)是为了更好的拟合,我觉得有道理,减小了输入那原来的特征就只能被迫组合,这样也就必须出来一个组合后的产物(有点像数学上的拟合过程),叫拟合是正常的。放一个转载的连接层代码,方便理解:

import torch.nn as nn import torch.nn.functional as F

class Net(nn.Module):     def __init__(self):         #nn.Module子类的函数必须在构建函数中执行父类的构造函数         #下式等价于nn.Module.__init__(self)         super(Net, self).__init__()         #卷积层“1”表示输入图片为单通道,“6”表示输出通道数,‘5’表示卷积核为5*5         self.conv1 = nn.Conv2d(1, 6, 5)         #卷积层         self.conv2 = nn.Conv2d(6, 16, 5)         #全连接层,y=Wx+b         self.fc1 = nn.Linear(16*5*5, 120)         #参考第三节,这里第一层的核大小是前一层卷积层的输出和核大小16*5*5,一共120层         self.fc2 = nn.Linear(120, 84)         #接下来每一层的核大小为1*1         self.fc3 = nn.Linear(84, 10)

    def forward(self, x):         #卷积--激活--池化         x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))         x = F.max_pool2d(F.relu(self.conv2(x)), 2)         #reshape ,'-1'表示自适应         x = x.view(x.size()[0], -1)         x = F.relu(self.fc1(x))         x = F.relu(self.fc2(x))         x = self.fc3         return x

net = Net() print(net)

 我觉得这几个函数的特点我都要放一下,方便我以后清楚他们各自的作用。

本文链接地址:https://www.jiuchutong.com/zhishi/298765.html 转载请保留说明!

上一篇:分享2款CSS3母亲节主题寄语文字动画特效

下一篇:【疯狂世界杯】css 动画实现跳动的足球(疯狂世界百科)

  • 荣耀20青春版呼吸灯如何设置(荣耀20青春版呼叫转移怎么设置)

    荣耀20青春版呼吸灯如何设置(荣耀20青春版呼叫转移怎么设置)

  • 微信发朋友圈怎么设置位置(微信发朋友圈怎么定位自己的位置)

    微信发朋友圈怎么设置位置(微信发朋友圈怎么定位自己的位置)

  • 微信如何人脸识别支付(微信如何人脸识别认证王者荣耀)

    微信如何人脸识别支付(微信如何人脸识别认证王者荣耀)

  • 微博怎么注销已经注册的账号(微博怎么注销已经不用以前的手机号了)

    微博怎么注销已经注册的账号(微博怎么注销已经不用以前的手机号了)

  • qq红包没领取24小时没退回(qq红包没领取怎么撤回)

    qq红包没领取24小时没退回(qq红包没领取怎么撤回)

  • wlan打开就自动关闭怎么回事(wlan打开就自动关闭怎么回事oppo)

    wlan打开就自动关闭怎么回事(wlan打开就自动关闭怎么回事oppo)

  • 华为nove7 SE和nove7的区别(华为nove7 se和nove7活力版的区别)

    华为nove7 SE和nove7的区别(华为nove7 se和nove7活力版的区别)

  • 苹果id被锁定是什么意思(苹果id锁了怎么解除)

    苹果id被锁定是什么意思(苹果id锁了怎么解除)

  • 用万能钥匙蹭网一直有个叹号(用万能钥匙蹭网安全吗)

    用万能钥匙蹭网一直有个叹号(用万能钥匙蹭网安全吗)

  • 苹果笔一代充电要多久(苹果笔一代充电器)

    苹果笔一代充电要多久(苹果笔一代充电器)

  • 电脑黑屏风扇狂转(电脑黑屏风扇狂转可以强制关机吗)

    电脑黑屏风扇狂转(电脑黑屏风扇狂转可以强制关机吗)

  • b站黑名单在哪里看(b站黑名单在哪看 哔哩哔哩黑名单查询方法)

    b站黑名单在哪里看(b站黑名单在哪看 哔哩哔哩黑名单查询方法)

  • 星标朋友代表什么(星标朋友有什么意义)

    星标朋友代表什么(星标朋友有什么意义)

  • qq亲密关系解除了 亲密度还在吗(qq亲密关系解除多久可以建立新关系)

    qq亲密关系解除了 亲密度还在吗(qq亲密关系解除多久可以建立新关系)

  • 路由器连接上有信号但上不了网(路由器连接上有个感叹号的故障灯)

    路由器连接上有信号但上不了网(路由器连接上有个感叹号的故障灯)

  •  iphone6怎么截屏长图(iphone6怎么截屏图片)

    iphone6怎么截屏长图(iphone6怎么截屏图片)

  • pps是什么(pps是什么材料)

    pps是什么(pps是什么材料)

  • app用什么语言开发(手机app用什么语言开发最好)

    app用什么语言开发(手机app用什么语言开发最好)

  • 人参果与什么食物相克(人参果与什么食物相克呢视频)

    人参果与什么食物相克(人参果与什么食物相克呢视频)

  • 苹果打电话听筒没声音(苹果打电话听筒没有声音免提有声音)

    苹果打电话听筒没声音(苹果打电话听筒没有声音免提有声音)

  • 自动锁定30秒怎么改不了(自动锁定30秒怎么改不了没有开省电)

    自动锁定30秒怎么改不了(自动锁定30秒怎么改不了没有开省电)

  • 抖音被的记录怎么删除(抖音的记录怎么没有)

    抖音被的记录怎么删除(抖音的记录怎么没有)

  • etc激活后可以拔卡吗(etc激活后拔卡,再怎么开启)

    etc激活后可以拔卡吗(etc激活后拔卡,再怎么开启)

  • 苹果手机屏幕原彩在哪(苹果手机屏幕原装屏和组装屏区别大吗)

    苹果手机屏幕原彩在哪(苹果手机屏幕原装屏和组装屏区别大吗)

  • 微信里石头剪刀布在哪里(微信里石头剪刀布怎么玩)

    微信里石头剪刀布在哪里(微信里石头剪刀布怎么玩)

  • 生产经营怎么填写
  • 出口退税的账怎么做
  • 财务刷卡手续费怎么处理
  • 电子发票怎么开具
  • 固定资产转让开票金额是净值
  • 一般纳税人能否享受残保金优惠
  • 利润表营业外收入怎么取数
  • 利润表本期金额怎么算
  • 一次性筷子的消费税
  • 上月营业外收入少报入了怎么办
  • 逾期支付工程款利息计算
  • 发票冲销后还能用吗
  • 股权转让时资本怎么算
  • 企业一直零申报印花税
  • 会务费发票税点是多少
  • 增值税怎么补提
  • 企业应交增值税的计算公式
  • 资金清算款项
  • 个人所得税0元算不算缴税
  • 单位探望病人如何报销费用?
  • 合作社人工工资账务处理
  • 小规模公司减免的增值税怎么做账
  • 公司委托第三方缴纳社保合法吗
  • php递归函数详解
  • 台式机显示器推荐
  • win10修改hosts文件权限
  • 贷款房屋评估费用
  • PHP:session_encode()的用法_Session函数
  • 往来账款如何做账务处理
  • PHP:JDToFrench()的用法_日历函数
  • 视同销售实物出资是否开专票吗
  • 养殖场租赁发票图片
  • 网上税则
  • 帝国cms建站教程
  • mongodb自增主键
  • 耕地占用税通过税金及附加核算吗
  • 企业停工期间发生的费用如何处理
  • 小微企业所得税优惠政策最新2023
  • 更改增值税申报表退税在哪里退钱
  • 营改增之前的工程还能开票吗
  • mysql存储引擎有哪些区别
  • 营业外支出账户核算的主要内容有
  • 企业如何做增值业务
  • 2021年购买土地需要缴纳什么税
  • 汽车行业的保险返点怎么算
  • 土地收储款是谁给谁
  • 厂家核销费用直接扣除吗
  • 分红冲抵往来会计分录
  • 信用担保融资的缺点
  • 进项税额转出科目编码
  • 有收入有支出怎么求和
  • 会计总账怎么做账
  • 用于职工福利的增值税怎么计算
  • sqlserver 类型
  • mysql停不掉
  • solaris安装教程
  • Win10 Build 10565快速预览版为什么有ISO镜像下载地址?
  • win7系统开启无线服务
  • xp系统光盘读不出来
  • win7 64位纯净版图标变成了一样该怎么办?win7旗舰版图标变成一样的解决方法
  • javascript编程规范
  • jquery邮箱正则表达式
  • python djang
  • 原生js实现promise
  • js瀑布流布局
  • nodejs python交互
  • python console不能用
  • python怎么调用shell脚本
  • jquery兼容ie
  • python按行写入txt
  • js有几种模式
  • 页面跳转后js还会执行吗
  • Python中Collections模块的Counter容器类使用教程
  • jquery动态添加的元素怎么添加事件
  • 普票怎么入账标识
  • 深圳税务网上申报客户端更正申报流程
  • 国家税务局大厅上班时间
  • 境外所得税额扣除的计算
  • 别人用你的收款码能骗到钱吗
  • 争议问题
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设