当前位置:   article > 正文

《深度学习进阶:自然语言处理(第1章)》-读书笔记

《深度学习进阶:自然语言处理(第1章)》-读书笔记

第1章 神经网络的复习

1.1 数学和Python的复习

  • 多维数组(矩阵)的形状和维数:
import numpy as np
x = np.array([[1, 2, 3], [4, 5, 6]])
print(x.shape)  # (2, 3)——shape表示多维数组的形状
print(x.ndim)   # 2——ndim表示维数
  • 1
  • 2
  • 3
  • 4
  • 多维数组(矩阵)的对应元素运算:
W = np.array([[1, 2, 3], [4, 5, 6]])
X = np.array([[0, 1, 2], [3, 4, 5]])
print(W + X)  # array([[1, 3, 5], [7, 9, 11]])
print(W * X)  # array([[0, 2, 6], [12, 20, 30]])
  • 1
  • 2
  • 3
  • 4
  • 矩阵乘法:
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
print(np.dot(A,B))  # array([[19, 22], [43, 50]])
  • 1
  • 2
  • 3

1.2 神经网络的推理

  • 输人二维数据、输出三维数据的函数:为了使用神经网络进行实现,需要在输入层准备2个神经元,在输出层准备3个神经元。然后,在隐藏层(中间层)放置若干神经元。
  • 所有相邻的神经元之间都存在连接的神经网络称为全连接网络
import numpy as np
def sigmoid (x):
    raturn 1 / (1 + np.exp(-x))

x = np.random.randn(10, 2)  # 神经网络的输入
W1 = np.random.randn(2, 4)  # 第1个全连接层的权重
b1 = np.random.randn(4)     # 第1个全连接层的偏置
W2 = np.random.randn(4, 3)  # 第2个全连接层的权重
b2 = np.random.randn(3)     # 第2个全连接层的偏置

h = np.dot(x, W1) + b1      # 第1个全连接层的计算
a = sigmoid(h)              # 第1个全连接层的计算结果传入激活函数计算,得到隐层输入
s = np.dot(a, W2) + b2      # 隐层经过第1个全连接层的计算得到神经网络的输出
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

x 的形状是(10, 2),表示10笔二维数据组织为了1个mini-batch。最终输出的 s 的形状是(10, 3)。这意味着10笔数据一起被处理了,每笔数据都被变换为了三维数据。

  • 层的类化及正向传播的实现:
import numpy as np
class Sigmoid:
    """激活函数"""
    def __init__(self):
        self.params = []
    def forward(self, x):
        return 1 / (1 + np.exp(-x))

class Affine:
    """全连接层"""
    def __init__(self, W, b):
        self.params = [W, b]
    def forward(self, x):
        W, b = self.params
        out = np.dot(x, W) + b
        return out

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.params
	def 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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

Python 中可以使用+运算符进行列表之间的拼接。

继续阅读:
《深度学习进阶:自然语言处理(第1章)》-读书笔记
《深度学习进阶:自然语言处理(第2章)》-读书笔记
《深度学习进阶:自然语言处理(第3章)》-读书笔记
《深度学习进阶:自然语言处理(第4章)》-读书笔记
《深度学习进阶:自然语言处理(第5章)》-读书笔记
《深度学习进阶:自然语言处理(第6章)》-读书笔记
《深度学习进阶:自然语言处理(第7章)》-读书笔记
《深度学习进阶:自然语言处理(第8章)》-读书笔记

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号