当前位置:   article > 正文

[ML]机器学习_如何用代码实现

[ML]机器学习_如何用代码实现

目录

一、用代码实现推理

1、定义

2、使用TensorFlow

 3、TensorFlow中的数据形式

4、NumPy中的数据形式

二、搭建一个神经网络

1、手动创建

2、TensorFlow搭建

3、单个网络层上的前向传播

4、前向传播一般实现


一、用代码实现推理

1、定义

TensorFlow是由Google推出的开源机器学习框架,被广泛应用于深度学习、神经网络等领域。它可以在各种硬件设备上运行,包括CPU、GPU和TPU等,使得用户可以在不同的硬件上进行机器学习的计算。

  1. 数据流图(Data Flow Graph):TensorFlow采用数据流图模型来表示计算图,节点表示操作,边表示数据。这种模型可以并行计算,使得TensorFlow在大规模数据处理时能够高效地运行。

  2. 自动微分(Automatic Differentiation):TensorFlow内置自动微分功能,可以自动计算张量变量的梯度,为模型训练提供便利。

  3. 张量(Tensor):在TensorFlow中,数据以张量(Tensor)形式表示,张量是多维数组,包含类型和形状两个属性。张量是TensorFlow的核心数据类型。

  4. 变量(Variable):在TensorFlow中,变量(Variable)是可以被训练的参数,通常用于神经网络中的权重和偏置等参数。

  5. 会话(Session):在TensorFlow中,需要使用会话(Session)来启动计算图,会话可以在本地或远程服务器上运行。

  6. 模型保存和恢复:TensorFlow支持将模型保存为文件,并可以在之后恢复模型进行使用。

  7. 分布式训练(Distributed Training):TensorFlow支持分布式训练,可以在多台设备上共同训练模型,更快地完成训练任务。

  8. 预训练模型:TensorFlow还提供了多个预训练的模型,例如Inception、ResNet等,可以加速模型训练的过程。

TensorFlow是一个高效、灵活的机器学习框架,通过数据流图模型、自动微分、张量、变量、会话等特性,为用户提供了便利的工具来进行机器学习模型的设计、训练和部署。

2、使用TensorFlow

神经网络的一个显著特点是可以将相同的算法应用于许多不同的应用程序。

简单举例:

  1. x = np.array([[200.0, 17.0]])
  2. layer_1 = Dense(units=3, activation='sigmoid')
  3. a1 = layer_1(x)
  4. layer_2 = Dense(units=1, activation='sigmoid')
  5. a2 = layer_2(a1)

  1. if a2 >=0.5:
  2. y_hat = 1
  3. else:
  4. y_hat = 0

手写数字分类问题举例:

  1. x = np.array([[0.0,...245,...240...0]])
  2. layer_1 = Dense(units=25, activation='sigmoid')
  3. a1 = layer_1(x)
  4. layer_2 = Dense(units=15, activation='sigmoid')
  5. a2 = layer_2(a1)
  6. layer_3 = Dense(units=1, activation='sigmoid')
  7. a3 = layer_3(a2)

  1. if a3 >=0.5:
  2. y_hat = 1
  3. else:
  4. y_hat = 0

 3、TensorFlow中的数据形式

        TensorFlow中的数据主要以张量(Tensor)的形式存储和处理。Tensor是一种多维数组,可以包括任意数量的维度。在TensorFlow中,Tensor的维度被称为rank,每个维度的大小被称为shape。

        例如,一个rank为2的Tensor可以表示一个矩阵,其中第一个维度表示行数,第二个维度表示列数。一个rank为3的Tensor可以表示一个立方体,其中第一个维度表示高度,第二个维度表示行数,第三个维度表示列数。

        TensorFlow支持不同数据类型的Tensor,例如float、int、bool等。可以使用TensorFlow提供的API创建和处理Tensor,包括对Tensor进行数学运算、切片、索引等。TensorFlow还支持将Tensor转换为其他常见的数据类型如NumPy数组,以便更方便地进行数据处理和分析。

张量按照维度分为以下三种类型:

  1. 零阶张量:标量,没有维度,只包含一个值。

  2. 一阶张量:向量,只有一维。

  3. 高阶张量:多维数组,有两个或者多个维度。

        在TensorFlow中,我们可以使用NumPy数组或者Python列表来表示张量数据。例如,下面的代码创建了一个一阶张量:

  1. import tensorflow as tf
  2. import numpy as np
  3. tensor1 = tf.constant(np.array([1, 2, 3]))

        我们也可以使用tf.Variable()创建变量来表示数据,在使用变量时,需要调用tf.global_variables_initializer()初始化变量。例如,下面的代码创建了一个高阶张量:

  1. tensor2 = tf.Variable(np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]))
  2. init = tf.global_variables_initializer()
  3. with tf.Session() as sess:
  4. sess.run(init)
  5. print(sess.run(tensor2))

输出结果为:

  1. [[[1 2]
  2. [3 4]]
  3. [[5 6]
  4. [7 8]]]

4、NumPy中的数据形式

在Numpy中,数据形式主要有以下几种:

  1. 数组(Array):Numpy的基本数据结构,是一个多维数组。可以通过使用Numpy中的array函数创建。

  2. 矩阵(Matrix):Numpy中的矩阵是一个二维数组,是数组的一个特殊形式。可以通过使用Numpy中的matrix函数创建。

  3. 通用函数(Universal functions,ufunc):这是Numpy中的一个重要概念,是一种能够对数组中每个元素进行操作的函数。比如,可以使用Numpy中的ufunc函数对数组进行加、减、乘、除等操作。

  4. 结构化数组(Structured arrays):这是一种特殊的数组类型,可以包含不同类型和大小的元素。可以使用Numpy中的dtype函数进行声明。

  5. 随机数(Random):Numpy中有一个专门用于生成随机数的模块,包括了不同分布、不同形式的生成随机数函数。可以使用Numpy中的random模块进行操作。

        NumPy使用数组(array)来表示数据。数组是一种包含相同数据类型的多维数据结构。它们可以是一维、二维或更高维。NumPy数组可以容纳数值、布尔值和字符串等数据类型。为了创建一个NumPy数组,需要使用NumPy库中的array()函数和一些NumPy特定的数据类型。例如:

  1. import numpy as np
  2. a = np.array([1, 2, 3]) # 一维数组
  3. b = np.array([[1, 2], [3, 4]]) # 二维数组
  4. c = np.array([1, 2, 3], dtype=float) # 一维浮点数数组
  5. d = np.zeros((2, 3)) # 创建一个2x3的全0数组
  6. e = np.ones((3, 3)) # 创建一个3x3的全1数组
  7. f = np.random.rand(4, 4) # 创建一个4x4的随机数组

输出结果为:

  1. [1 2 3]
  2. [[1 2]
  3. [3 4]]
  4. [1. 2. 3.]
  5. [[0. 0. 0.]
  6. [0. 0. 0.]]
  7. [[1. 1. 1.]
  8. [1. 1. 1.]
  9. [1. 1. 1.]]
  10. [[0.40184097 0.46850557 0.92339515 0.18953361]
  11. [0.60179825 0.88171639 0.95011144 0.88197659]
  12. [0.45052987 0.21767196 0.77680007 0.76074492]
  13. [0.73655166 0.36848891 0.22042423 0.00778796]]

创建一个三维数组:

  1. import numpy as np
  2. arr = np.array([
  3. [[1, 2, 3], [4, 5, 6], [7, 8, 9]],
  4. [[10, 11, 12], [13, 14, 15], [16, 17, 18]],
  5. [[19, 20, 21], [22, 23, 24], [25, 26, 27]]
  6. ])
  7. print(arr)

运行结果:

  1. array([[[ 1, 2, 3],
  2. [ 4, 5, 6],
  3. [ 7, 8, 9]],
  4. [[10, 11, 12],
  5. [13, 14, 15],
  6. [16, 17, 18]],
  7. [[19, 20, 21],
  8. [22, 23, 24],
  9. [25, 26, 27]]])

这个三维数组由3个2维数组组成。每个2维数组是3行3列的,就像一个矩阵一样。

notes:    

        对于TesorFlow ,惯例是使用矩阵来表示数据,

        因为TensorFlow 旨在处理非常大的数据集,通过在矩阵表示数据,可以让其在内部更高效地进行计算 。

        张量tensor 比矩阵更加通用一点,我们可以将张量理解为表示矩阵的一种方式。

        几层方括号,就代表有几维

        一行两列(行向量)

        

       两行一列(列向量)

        

        一维向量(没有行和列)

        

二、搭建一个神经网络

1、手动创建

初始化数据 x ,创建第一层然后计算第一个激活值 a1
然后创建第二层并计算第二个激活值a2

2、TensorFlow搭建

不是手动获取数据并将其传递到第一层,然后从第一层获取激活并将其传递到第二层。

通过Sequential()函数,将创建的层串联起来创建神经网络。

将训练数据作为输入x并将它们放入一个NumPy数组中,目标标签y为一个长度为4的一维数组,将其存储起来作为训练示例。

训练神经网络时需要调用函数model.compile(...)来带入一些参数,然后调用model.fit(x,y)来告诉张量流采用这个通过按顺序将第一层和第二层串在一起创建的神经网络,并在数据x和y上对其进行训练。

如果我们有一个新的例子x_new,只需要调用model.predict(x_new) 即可,我们给定x的输入值,这将自动输出一个对应的值。

一般的,我们不将每一层的代码写出来,可以直接写在Sequential() 函数中,如:

放到函数中:

3、单个网络层上的前向传播

a2_1 表示上标是2,下标是1

第一层中有3个神经元,所以要计算3次,输出向量 a1, 这个a1 就是激活

这里,a1 = np.array([a1_1, a1_2, a1_3])

第二层中有1个神经元,所以计算一次即可,最后输出结果a2

4、前向传播一般实现

首先定义密集函数,用上一层的激活来作为下一层的输入,以及参数w,b ,表示给定层中的神经元。

如果一层有3个神经元,将参数w 的值可以写成一个2维矩阵。

类似的,如果有参数b ,可以将参数b 写成一个1维数组。

密集函数所做的就是将前一层的激活作为输入,密集函数的定义如图,它的作用就是输入前一层的激活,并给定当前层的参数,它会返回下一层的激活。

机器学习-什么是神经网络

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/959001
推荐阅读
相关标签
  

闽ICP备14008679号