美文网首页Python数据科学程序员
深度学习入门--NumPy多维数组的运算

深度学习入门--NumPy多维数组的运算

作者: 爱吃西瓜的番茄酱 | 来源:发表于2019-03-22 19:56 被阅读6次

想要高效地实现神经网络,离不开numpy多维数组的运算。

一维数组

先介绍numpy一维数组:

In [1]: import numpy as np
In [2]: A=np.array([1, 2, 3, 4])
In [3]: print(A)
[1 2 3 4]
In [4]: np.ndim(A)  # 数组A的维数
Out[4]: 1
In [6]: A.shape  # 数组A的形状
Out[6]: (4,)
In [7]: A.shape[0]
Out[7]: 4

如上所示,数组的维数可以通过np.ndim()函数获得;数组的形状可以通过<数组名>.shape获得。

二维数组

In [8]: B=np.array([[1,2],[3,4],[5,6]])
In [9]: print(B)
[[1 2]
 [3 4]
 [5 6]]
In [10]: np.ndim(B)
Out[10]: 2
In [11]: B.shape
Out[11]: (3, 2)

二维数组也称之为矩阵。

矩阵乘法

根据大学本科学的【线性代数】的知识可知:矩阵的乘积是通过左边矩阵的行和右边矩阵的列以对应元素相乘后再求和而得到的。

并且矩阵A和矩阵B相乘积的前提是:矩阵A的列数等于矩阵B的行数。

矩阵的乘积用代码实现如下:

In [13]:  A=np.array([[1,2],[3,4]])
In [14]: A.shape
Out[14]: (2, 2)
In [15]: B=np.array([[5,6],[7,8]])
In [16]: B.shape
Out[16]: (2, 2)
In [17]: np.dot(A,B)  # A*B
Out[17]:
array([[19, 22],
       [43, 50]])

矩阵的乘积可以通过numpy的np.dot()函数计算。np.dot()函数接收两个numpy数组作为参数,并返回数组的乘积。这里要注意,矩阵乘法没有交换律,即np.dot(A,B)一般不等于np.dot(B,A)

利用numpy数组实现三层神经网络

这里将输入信号、权重、偏置设置成任意值:

import numpy as np

# 中间层的激活函数sigmoid
def sigmoid(x):
    return 1/(1+np.exp(-x))

# 输出层的激活函数identity_function
def identity_function(x):
    return x  

# 初始化神经网络
def init_network():
    network={}
    network['w1']=np.array([[0.1,0.3,0.5], [0.2,0.4,0.6]]) # 第一层的权重
    network['b1']=np.array([0.1,0.2,0.3])  # 第一层的偏置
    network['w2']=np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]])  # 第二层的权重
    network['b2']=np.array([0.1,0.2])  # 第二层的偏置
    network['w3']=np.array([[0.1,0.3], [0.2,0.4]])  # 第三层的权重
    network['b3']=np.array([0.1,0.2])  # 第三层的偏置
    
    return network

# 神经网络的前向处理
def forward(network, x):
    w1, w2, w3=network['w1'], network['w2'], network['w3']
    b1, b2, b3=network['b1'], network['b2'], network['b3']
    
    a1=np.dot(x, w1) + b1
    z1=sigmoid(a1) # 第一层的激活函数
    a2=np.dot(z1,w2) + b2 
    z2=sigmoid(a2)  # 第二层的激活函数
    a3=np.dot(z2, w3) + b3
    y=identity_function(a3)  # 输出层的激活函数(恒等函数)
    
    return y

network=init_network()
x=np.array([1.0, 0.5])  # 两个输入信号
y=forward(network, x)   # 输出信号
print(y)

输出为:

[0.31682708 0.69627909]

这里主要有sigmoid()函数identity_function()函数init_network()函数forward()函数这四个函数:

  • sigmoid()函数:中间层的激活函数
  • identity_function()函数: 输出层的激活函数
  • identity_function()函数:进行权重和偏置的初始化,并将它们保存在字典变量network中。
  • forward()函数: 封装了将输入信号转换成输出信号的处理过程,这个过程称之为前向处理

借助numpy多维数组,我们可以方便地实现神经网络。

每天学习一点点,每天进步一点点。

相关文章

  • 深度学习入门--NumPy多维数组的运算

    想要高效地实现神经网络,离不开numpy多维数组的运算。 一维数组 先介绍numpy一维数组: 如上所示,数组的维...

  • 1.2 张量库numpy

    1.2 张量库numpy 张量也称多维数组,它是多个数值的有规律的排列。张量运算是深度学习的最主要运算。本章介绍...

  • 机器学习利器之Numpy

    Numpy 多维数组 Numpy 创建N维数组 查看数组属性 shape操作 数组索引和迭代 拼接、分割 基础运算...

  • 数据分析学习笔记(二)--numpy:数组对象相关操作

    数组和标量的运算 加、减、乘、除、平方等运算 numpy中内置的运算 数组的索引和切片 一维数组的索引和切片 多维...

  • ndarray数组创建

    数值计算库-Numpy的作用: Numpy用于在大型、多维数组(矩阵)上执行数值运算 Numpy是Scipy/Pa...

  • Python | numpy

    numpy(Numerical Python)提供了python对多维数组对象的支持:ndarray,具有矢量运算...

  • numpy 基本使用

    前言 Numpy是python中的科学计算工具包,提供了一个多维数组对象,用于多维数组或者矩阵的快速运算,包括线性...

  • 深入理解:Python中的轴和维度的关系

    【引子】这次刚入门了numpy,在其中使用numpy建立多维数组的时候提到了很多有关数组的维度和轴的一些相关的知识...

  • NumPy 基础入门

    NumPy 基础入门 多维数组 数值类型 数据类型对象(dtype) 记录类型 操作形状 堆叠 分割 属性 转换

  • Python数据分析:Numpy学习笔记

    Numpy学习笔记 ndarray多维数组 创建 数组创建函数 arange ones/ones_like zer...

网友评论

    本文标题:深度学习入门--NumPy多维数组的运算

    本文链接:https://www.haomeiwen.com/subject/mznrvqtx.html