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

【自学记录】深度学习进阶:自然语言处理(第一章 神经网络的复习)

1.1 数学和python的复习

今天,终于,借此机会,终于学会用命令行了!学习记录(感谢步老师!!!)
需要注意的点是 np.dot(),当参数是一维数组时,计算向量内积;当参数是二维数组时,计算矩阵乘积。

>>> import numpy as np
>>> x=np.array([1,2,3])
>>> x.__class__#输出类名
<class 'numpy.ndarray'>
>>> x.shape
(3,)
>>> x.ndim
1   
>>> W=np.array([[1,2,3],[4,5,6]])
>>> W.shape
(2, 3)
>>> W.ndim
2
>>> W=np.array([[1,2,3],[4,5,6]])
>>> X=np.array([[0,1,2],[3,4,5]])
>>> W+X
array([[ 1,  3,  5],[ 7,  9, 11]])
>>> W*X
array([[ 0,  2,  6],[12, 20, 30]])
>>> #广播
>>> A=np.array([[1,2],[3,4]])
>>> A*10
array([[10, 20],[30, 40]])
>>> A=np.array([[1,2],[3,4]])
>>> b=np.array([10,20])
>>> A*b
array([[10, 40],[30, 80]])
>>> b=np.array([4,5,6])
>>> np.dot(a,b)#当参数是一维数组时,计算向量内积
32
>>> A=np.array([[1,2],[3,4]])
>>> B=np.array([[5,6],[7,8]])
>>> np.dot(A,B)#当参数是二维数组时,计算矩阵乘积
array([[19, 22],[43, 50]])

1.2 神经网络的推理

1.2.1 神经网络的推理的全貌图

实现的是这个网络请添加图片描述

x 的形状是(10, 2),表示10笔二维数据组织为了1个mini-batch。最终输出的s 的形状是(10, 3)

#Python写出mini-batch版的全连接层变换
def sigmoid(x):return 1/(1+np.exp(-x))
import numpy as np
x=np.random.randn(10,2)#输入
W1=np.random.randn(2,4)#权重
b1=np.random.randn(4) #偏置W2=np.random.randn(4,3)#权重
b2=np.random.randn(3) #偏置h=np.dot(x,W1)+b1 
a=sigmoid(h)#sigmoid非线性变换
s=np.dot(a,W2)+b2 

以上就是神经网络的推理部分的实现。 接下来,我们使用Python的类,将这些处理实现为层。

1.2.2 层的类化及正向传播的实现

请添加图片描述

只考虑正向传播,所以我们仅关注代码规范中的以下两点:一是在层中实现forward() 方法;二是将参数整理到实例变量params 中

#sigmoid
import numpy as np
class Sigmoid:def __init__(self):self.params=[]#因为Sigmoid层没有需要学习的参数,所以使用空列表来初始化实例变量paramsdef forward(self,x):return 1/(1+np.exp(-x))
#Affine层
class Affine:def __init__(self,W,b):#Affine层在初始化时接收权重和偏置self.params=[W,b]#此时,Affine层的参数是权重和偏置(在神经网络的学习时,这两个参数随时被更新)def forward(self,x):W,b=self.params#这是个什么语法 列表里只有两个值,所以可以这样取出来吗?[对的!]out=np.dot(x,W)+b return out
#输入X经由Affine层、Sigmoid层和Affine层后输出得分S。我们将这个神经网络实现为名为TwoLayerNet 的类,将主推理处理
#实现为predict(x) 方法       
class TwoLayerNet:def __init__(self,input_size,hidden_size,output_size):I,H,O=input_size,hidden_size,output_size#初始化权重和偏置W1=np.random.randn(I,H)b1=np.random.randn(H)W2=np.random.randn(H,O)b2=np.random.randn(O)#生成层self.layers=[Affine(W1,b1),Sigmoid(),Affine(W2,b2)]#将所有的权重整理到列表中self.params=[] ##类的实例属性for layer in self.layers:self.params+=layer.paramsdef predict(self,x):for layer in self.layers:x=layer.forward(x)return x    
x=np.random.randn(10,2)
model=TwoLayerNet(2,4,3)#实例化一个网络类
s=model.predict(x)
print(s)

其中,

for layer in self.layers:self.params+=layer.params

因为各个层的实例变量params 中都保存了学习参数,所以只需要将它们拼接起来即可。这样一来,TwoLayerNet 的params
变量中就保存了所有的学习参数。像这样,通过将参数整理到一个列表中,可以很轻松地进行参数的更新和保存

>>> a=['A','B']
>>> a+=['c','d']
>>> a
['A', 'B', 'c', 'd']

此外,Python中可以使用+ 运算符进行列表之间的拼接。下面是一个
简单的例子。

######以上代码保存于my_forward_net.py中 23.11.20

相关文章:

  • Linux 启动停止重启jar包shell脚本
  • 【2023云栖】陈守元:阿里云开源大数据产品年度发布
  • 【数据库】你听说过矢量数据库吗?
  • 机器学习算法——集成学习
  • Vue项目Jenkins自动化部署
  • Golang中读写CSV文件的全面指南
  • 鸿蒙原生应用/元服务开发-AGC分发如何编译打包应用
  • qt和window抓包程序
  • RK3588产测软件介绍
  • kafka原理看这一篇就够了
  • 【经验分享】Ubuntu如何设置swap交换
  • HIS系统源码,云HIS源码,二级医院信息管理系统源码,预约挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生工作站、护士工作站
  • 推荐一个windows上传linux服务器/linux服务器的docker镜像的工具,摆脱docker cp,以及解决常见问题。
  • Redis的简单使用
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • Apache的80端口被占用以及访问时报错403
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • extract-text-webpack-plugin用法
  • IDEA常用插件整理
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Service Worker
  • Spark RDD学习: aggregate函数
  • vue学习系列(二)vue-cli
  • 程序员该如何有效的找工作?
  • 构建工具 - 收藏集 - 掘金
  • 入口文件开始,分析Vue源码实现
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 用Visual Studio开发以太坊智能合约
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #DBA杂记1
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (11)MATLAB PCA+SVM 人脸识别
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (差分)胡桃爱原石
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (原創) 物件導向與老子思想 (OO)
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • **PHP二维数组遍历时同时赋值
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .gitignore
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET 反射 Reflect
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .Net各种迷惑命名解释
  • .net和php怎么连接,php和apache之间如何连接
  • .NET上SQLite的连接
  • .Net小白的大学四年,内含面经
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • .Net组件程序设计之线程、并发管理(一)
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化