鱼书学习笔记(《深度学习入门:基于Python的理论与实现》)

鱼书下载

第一章 Python入门

虽然学过Python了,但是很明显学的一塌糊涂

1.3 Python解释器

1.3.4 列表

切片

>>>print(a)
[1, 2, 3, 4, 99]
>>>a[0: 2]	# 获取索引为0到(2-1)的元素
[1, 2]
>>>a[1: ]	# 获取从索引为1的元素到最后一个元素
[2, 3, 4, 99]
>>>a[ :3]	# 获取从第一个元素到索引为(3-1)的元素
[1, 2, 3]
>>>a[ :-1]	# 获取从第一个元素到(-1-1)的元素
[1, 2, 3, 4]
>>>a[ :-2]	# 获取从第一个元素到(-2-1)的元素
[1, 2, 3]

索引-1对应最后一个元素。

1.3.5 字典

字典以键值对的形式存储数据

>>>me = {'height': 180}	# 生成字典
>>>me['height']	# 访问元素
180
>>>me['weight'] = 70	# 添加新元素
>>>print(me)
{'height': 180, 'weight': 70}

1.3.6 布尔型

运算符and、or、not

1.3.8 for循环

使用*for…in…*语句结构,可以顺序访问列表等数据集合中的各个元素。

1.3.9 函数

函数可以取参数

def hello(object):
	print("Hello " + object + "!")

字符串的拼接可以使用+

1.4 Python脚本文件

1.4.2 类

int和str等数据类型是“内置”的数据类型。
用户自己定义类的话,就可以自己创建数据类型,同时可以定义原创的方法(类的函数)和属性。

class定义类

class 类名
	def __init__(self, 参数,):	# 构造函数
	def fun1(self, 参数,):	#方法1

构造函数:__init__方法,只在生成类的实例时被调用一次,接收参数,再初始化实例变量self.参数,实例变量存储在各个实例中。在方法的第一个参数中明确地写入表示自身(自身的实例)的self,Python可以通过在self后面添加属性名来生成或访问实例变量。

1.5 Numpy

生成numpy的数组类可以调用对应的方法。

>>>x = np.array([1.0, 2.0, 3.0])
>>>print(x)
[1. 2. 3.]
>>>type(x)
<class 'numpy.ndarray'>

1.5.2 算数计算

数组+/-数组,对应元素加对应元素,元素个数不同,程序就会报错。
高维数组x//标量/低维数组,通过广播进行运算(先扩为高维数组再对应元素计算)。

1.5.4 N维数组

一维数组:向量
二维数组:矩阵
一般化之后的向量或矩阵等统称为张量

在数学和物理学中,"一般化"通常指的是将特定的数学概念或物理现象推广到更一般的情况。在张量的概念中,一般化指的是将向量和矩阵等特定的数学对象推广到更高维度的对象,从而得到更一般的数学结构。张量可以看作是向量和矩阵的一般化,它可以在多维空间中描述各种物理量的分布和变化规律。

1.5.5 广播


标量10被扩展成了2x2的形状。
在这里插入图片描述

1.5.6访问元素

>>>x = x.flatten()	# 将x转换为一维数组
>>>print(x)
[1 2 3 4 5 6]
>>>x[np.array([0, 2, 4])]	# 获取索引为0、2、4的元素
array([1, 3, 5])
# 从x中抽出大于3的元素
>>>x >3
array([False, False, False, True, True, True], dtype = bool)
>>>x[x>15]
array([4, 5, 6])

1.6 Matplotlib

绘制图形的库

x = np.arange(0, 6, 0.1)	# 以0.1为单位,生成0到6的数据
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y1, label = "sin")
plt.plot(x, y2, linestyle = "--", label = "cos")	# 用虚线绘制
plt.xlabel("x")	# x轴标签
plt.ylabel("y")
plt.title('sin&cos')	# 标题
plt.legend()	# 图例
plt.show()

在这里插入图片描述

1.6.3 显示图像

from matplotlib.image import imread
img = imread('lena.png')	# 读入图像
plt.imshow(img)
plt.show()

第二章 感知机

感知机是神经网络(深度学习)的起源算法。
本章中提到的感知机应该称为“人工神经元”或“朴素感知机”。

2.1 感知机是什么

感知机例子
上图中输入信号 x 1 , x 2 x_1,x_2 x1,x2,权重 w 1 , w 2 w_1,w_2 w1,w2,输出信号 y y y。图中的○称为“神经元”或“节点”。
y = w 1 x 1 + w 2 x 2 y=w_1x_1+w_2x_2 y=w1x1+w2x2
当总和超过阈值 θ \theta θ时,才会输出1,称为“神经元被激活”。
y = { 0 ( ω 1 x 1 + ω 2 x 2 ≤ θ ) 1 ( ω 1 x 1 + ω 2 x 2 > θ ) y=\left\{ \begin{matrix} 0 & \left( {{\omega }_{1}}{{x}_{1}}+{{\omega }_{2}}{{x}_{2}}\le \theta \right) \\ 1 & \left( {{\omega }_{1}}{{x}_{1}}+{{\omega }_{2}}{{x}_{2}}>\theta \right) \\ \end{matrix} \right. y={01(ω1x1+ω2x2θ)(ω1x1+ω2x2>θ)
权重越大,对应该权重的信号就越重要。

2.2 简单逻辑电路

通过设置权重和阈值可以用感知机实现与门、与非门、或门。机器学习的课题就是将决定参数值的工作交由计算机完成。

2.3 感知机的实现

2.3.2 导入权重和偏置

y = { 0 ( b + ω 1 x 1 + ω 2 x 2 ≤ 0 ) 1 ( b + ω 1 x 1 + ω 2 x 2 > 0 ) y = \left\{ {\begin{array}{ccccccccccccccc}0&{\left( {{\rm{b + }}{\omega _1}{x_1} + {\omega _2}{x_2} \le 0} \right)}\\1&{\left( {b + {\omega _1}{x_1} + {\omega _2}{x_2} > 0} \right)}\end{array}} \right. y={01(b+ω1x1+ω2x20)(b+ω1x1+ω2x2>0)
b b b为偏置,实际上就是将 θ \theta θ移动到左侧。
权重是控制输入信号的重要性的参数,而偏置是调整神经元被激活的容易程度的参数。

2.4 感知机的局限性

2.4.1 异或门

感知机无法实现异或门。
由上文可知,我们运用的是单层感知机,对于与门、与非门、或门来说,单层感知机足以生成由直线分隔开的两个空间,一个空间输出0,一个空间输出1。例如下图的与门形象化图:
在这里插入图片描述
对于异或门来说,仅当一方为1时,才会被激活。
异或门真值表
对于此时的异或门空间来说,一条直线不足以分割0和1的空间。
异或门空间平面图

2.4.2 线性和非线性

感知机的局限性就在于它只能表示由一条直线分割的空间。曲线分割的空间称为非线性空间,直线分割的空间为线性空间。
非线性空间

2.5 多层感知机

感知机可以“叠加层”。
单层感知机无法分离非线性空间,多层感知机可以实现异或门。
在这里插入图片描述在这里插入图片描述
一些电路的记忆恢复了。
本书认为拥有权重的层实质上只有2层,多以称为“两层感知机”。(接收输入信号并没有进行运算,0层不算层,也没什么问题。)
在这里插入图片描述

2.6 从与非门到计算机

多层感知机可以实现更复杂的电路,输入->输出。
计算机是处理信息的机器。
所以只需要通过与非门的组合,就能再现计算机进行的处理。所以感知机可以表示计算机。
什么不等式行为。
上述都是理论结果。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值