《深度学习进阶:自然语言处理(第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表示维数
  • 多维数组(矩阵)的对应元素运算:
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]])
  • 矩阵乘法:
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 神经网络的推理

  • 输人二维数据、输出三维数据的函数:为了使用神经网络进行实现,需要在输入层准备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个全连接层的计算得到神经网络的输出

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)

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值