人工智能深度学习入门练习之(26)TensorFlow – 例子:人工神经网络(

人工神经网络 (ANN) 生物神经元简介

人脑有数十亿个神经元。神经元是人脑中相互连接的神经细胞,负责处理和传递化学和电信号。

以下是生物神经元的重要组成部分:

人脑中神经元处理信息的过程:多个信号到达树轴突然后整合到细胞体中,如果积累的信号超过一定的阈值,就会产生一个输出信号,传递出去通过轴突。

人工神经元

人工神经元是一种基于生物神经元的数学模型。神经元接受多个输入信息,对它们进行加权求和,然后通过一个激活函数。处理并输出结果。

生物神经元与人工神经元

生物神经元

人工神经元

细胞核

节点(加权和+激活函数)

树枝状

输入

轴突

加权连接

突触

输出

人工神经网络

人工神经网络,模仿哺乳动物大脑皮层神经系统,但规模要小得多。它由许多相互连接的简单处理单元(神经元)组成,这些处理单元(神经元)的作用类似于生物神经元,接受信息输入,处理后将信息输出到下一层。

人工神经网络由多层神经元组成。层之间的神经元有连接,而层内的神经元没有连接。最左边的层称为输入层,负责接收输入数据;最右边的层称为输出层,从中我们可以得到神经网络的输出数据。输入层和输出层之间的层称为隐藏层。

人工神经网络训练

向神经网络输入一批样本数据,神经网络会产生输出。将神经网络的输出与样本中的正确结果进行比较,根据两者的差异调整神经网络的权重,使差异更小。重复这个过程,直到神经网络产生正确的输出,从而确定神经网络的权重以完成训练。

经过训练的神经网络可用于处理数据,将数据输入到神经网络,并给出正确的输出。

所以,所谓的神经网络训练过程,其实就是确定神经元之间输入权重的过程。

如上图所示,具体训练过程如下:

向神经网络输入一批样本数据,并将其传输到神经网络。输出层,这一步称为前向传播。计算损失函数的值,表示预测结果(Y)与已知结果(真标签Y)的差值。使用优化器(通常是梯度下降和反向传播),调整权重以使差异更小。

重复以上3步训练权重,直到损失函数的值(差)最小,确定最终权重值,完成训练。

注意:有关人工神经网络的更多详细信息,请参阅我们的深度学习教程。

人工神经网络示例

一种可极大简化机器学习编程的高级 API。封装了以下动作:

开发者可以使用预先创建的,或者编写自定义的。所有(无论是预先创建的还是自定义的)都是基于 tf.. 类的类。

在这一部分中,我们将学习使用高级训练神经网络,它是神经网络分类器的一种实现。训练数据集 我们将使用 MNIST 数据集。

MNIST (of and ) 是一个大型的手写数字数据库,通常用作各种图像识别系统的训练数据集。该数据集包含 0 到 9 的 28×28 像素手写数字图像,现已成为英文数字训练的标准数据集。

图片[1]-人工智能深度学习入门练习之(26)TensorFlow – 例子:人工神经网络(-唐朝资源网

神经网络训练完成后,其功能是识别手写数字。

训练一个神经网络并不复杂,我们如下进行:

导入数据转换数据构造张量构建模型训练和评估模型改进模型1.导入数据

需要先导入必要的库,除了,我们将使用:

可用于导入MNIST数据集、预处理数据等

import numpy as np
import tensorflow as tf

用于共享机器学习数据和实验的公共存储库,每个人都可以共享和下载数据集。 . 中的函数可以从存储库下载数据集。我们将使用此函数从 下载 MNIST 数据集,下载需要几分钟时间。

MNIST 数据集包含样本特征集 mnist.data 和样本标签 mnist..

# 导入sklearn库中fetch_openml函数,下载MNIST数据集
from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784')
print(mnist.keys())
print(mnist.data.shape)
print(mnist.target.shape)

使用函数将数据集随机划分为训练子集和测试子集,并返回划分后的训练集测试集样本和训练集测试集Label。

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(mnist.data, mnist.target, test_size=0.2, random_state=42)
y_train  = y_train.astype(int)
y_test  = y_test.astype(int)
batch_size = len(X_train)
# 查看训练样本子集、训练样本标签子集、测试样本子集、测试样本标签子集的形状
print(X_train.shape, y_train.shape, X_test.shape, y_test.shape)

函数参数说明:

随机数种子

随机数的产生依赖于种子,随机数与种子的关系遵循以下两条规则:

不同的种子产生不同的随机数;即使实例不同,相同的种子也会生成相同的随机数。

随机数种子其实就是这组随机数的序号。当需要重复实验时,同一个种子可以保证得到同一组随机数。比如每次填1,其他参数都一样,得到的随机数组是一样的,但是填0与否,每次都不一样。

2.数据预处理

训练前需要对数据集进行归一化处理,可以提高模型收敛速度和模型准确率。我们将使用最小-最大归一化方法,其公式为:

(X-min_x)/(max_x - min_x)

库中已经为此提供了一个函数:()

## 导入MinMaxScaler
from sklearn.preprocessing import MinMaxScaler

图片[2]-人工智能深度学习入门练习之(26)TensorFlow – 例子:人工神经网络(-唐朝资源网

scaler
= MinMaxScaler() # 训练样本子集 X_train_scaled = scaler.fit_transform(X_train.astype(np.float64)) # 测试样本子集 X_test_scaled = scaler.fit_transform(X_test.astype(np.float64))

3.构造张量

构造输入特征列张量。中的特征列可以看作是原始数据和 .特征列功能强大,可以将各种原始数据转换为可用格式。

feature_columns = [tf.feature_column.numeric_column('x', shape = X_train_scaled.shape[1:])]

4.构建模型

神经网络结构包含两个隐藏层,第一层是 300 个神经元,第二层是 100 个神经元。这些值是经验值,您可以尝试调整这些值,看看它如何影响网络的准确性。

要构建模型,请使用 ..

estimator = tf.estimator.DNNClassifier(
    feature_columns=feature_columns,
    hidden_units=[300, 100], 
    n_classes=10, 
    model_dir = './train/DNN')

参数

5.训练和评估模型

Numpy 方法可用于训练和评估评估模型。

# 训练模型
train_input = tf.estimator.inputs.numpy_input_fn(
    x={"x": X_train_scaled},
    y=y_train,
    batch_size=50,
    shuffle=False,
    num_epochs=None)
estimator.train(input_fn = train_input,steps=1000) 
# 评估模型
eval_input = tf.estimator.inputs.numpy_input_fn(
    x={"x": X_test_scaled},
    y=y_test, 
    shuffle=False,
    batch_size=X_test_scaled.shape[0],
    num_epochs=1)

图片[3]-人工智能深度学习入门练习之(26)TensorFlow – 例子:人工神经网络(-唐朝资源网

result
= estimator.evaluate(eval_input, steps=None) print(result)

输出

{'accuracy': 0.9720714, 'average_loss': 0.09608318, 'loss': 1345.1646, 'global_step': 4000}

可以看出模型的准确率现在是97%。

6.改进模型

为了减少过拟合,添加一个正则化参数来改进模型。我们将速率设置为 0.3,使用 Adam Grad 优化器:tf.train.izer,并设置以下参数:

estimator_imp = tf.estimator.DNNClassifier(
    feature_columns = feature_columns,
    hidden_units = [300, 100],
    dropout = 0.3, 
    n_classes = 10,
    optimizer=tf.train.ProximalAdagradOptimizer(
      learning_rate=0.01,
      l1_regularization_strength=0.01, 
      l2_regularization_strength=0.01
    ),
    model_dir = './train/DNN1')
estimator_imp.train(input_fn = train_input, steps=1000) 
result = estimator_imp.evaluate(eval_input, steps=None) 
print(result)

输出

{'accuracy': 0.94292855, 'average_loss': 0.2078176, 'loss': 2909.4463, 'global_step': 1000}

完整代码:

import tensorflow.compat.v1 as tf
import numpy as np
tf.compat.v1.disable_eager_execution()
# 导入sklearn库中fetch_openml函数,下载MNIST数据集
from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784')
print(mnist.keys())
print(mnist.data.shape)
print(mnist.target.shape)

图片[4]-人工智能深度学习入门练习之(26)TensorFlow – 例子:人工神经网络(-唐朝资源网

from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(mnist.data, mnist.target, test_size=0.2, random_state=42) y_train = y_train.astype(int) y_test = y_test.astype(int) batch_size = len(X_train) # 查看训练样本子集、训练样本标签子集、测试样本子集、测试样本标签子集的形状 print(X_train.shape, y_train.shape, X_test.shape, y_test.shape) from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(mnist.data, mnist.target, test_size=0.2, random_state=42) y_train = y_train.astype(int) y_test = y_test.astype(int) batch_size = len(X_train) # 查看训练样本子集、训练样本标签子集、测试样本子集、测试样本标签子集的形状 print(X_train.shape, y_train.shape, X_test.shape, y_test.shape) ## 导入MinMaxScaler from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() # 训练样本子集 X_train_scaled = scaler.fit_transform(X_train.astype(np.float64)) # 测试样本子集 X_test_scaled = scaler.fit_transform(X_test.astype(np.float64)) feature_columns = [tf.feature_column.numeric_column('x', shape = X_train_scaled.shape[1:])] estimator = tf.estimator.DNNClassifier( feature_columns=feature_columns, hidden_units=[300, 100], n_classes=10, model_dir = './train/DNN') # 训练模型 train_input = tf.estimator.inputs.numpy_input_fn( x={"x": X_train_scaled}, y=y_train, batch_size=50,

图片[5]-人工智能深度学习入门练习之(26)TensorFlow – 例子:人工神经网络(-唐朝资源网

shuffle
=False, num_epochs=None) estimator.train(input_fn = train_input,steps=1000) # 评估模型 eval_input = tf.estimator.inputs.numpy_input_fn( x={"x": X_test_scaled}, y=y_test, shuffle=False, batch_size=X_test_scaled.shape[0], num_epochs=1) result = estimator.evaluate(eval_input, steps=None) print(result) estimator_imp = tf.estimator.DNNClassifier( feature_columns = feature_columns, hidden_units = [300, 100], dropout = 0.3, n_classes = 10, optimizer=tf.train.ProximalAdagradOptimizer( learning_rate=0.01, l1_regularization_strength=0.01, l2_regularization_strength=0.01 ), model_dir = './train/DNN1') estimator_imp.train(input_fn = train_input, steps=1000) result = estimator_imp.evaluate(eval_input, steps=None) print(result)

执行结果:

{'accuracy': 0.94292855, 'average_loss': 0.2078176, 'loss': 2909.4463, 'global_step': 1000}

减少过拟合的参数设置并没有提高模型的准确率,第一个模型的准确率为 97%,而 L2 正则化模型的准确率为 94%。您可以尝试不同的值,看看它如何影响准确性。

总结

在本教程中,我们学习了如何构建神经网络。神经网络需求:

中,可以使用tf..来训练一个神经网络来解决一个分类问题,需要设置的参数如下:

可以使用不同的优化器模型进行改进。我们学习了如何使用 Adam Grad 优化器和学习率,并设置控制参数以防止过拟合。

© 版权声明
THE END
喜欢就支持一下吧
点赞8赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容