主页
  • 主页
  • 分类
  • 热文
  • 教程
  • 面试
  • 标签
Python 人工智能

Python 人工智能 教程

Python 人工智能 入门概念
Python 人工智能 开始使用
Python 人工智能 机器学习
Python 人工智能 数据准备
Python 人工智能 监督学习:分类
Python 人工智能 监督学习:回归
Python 人工智能 逻辑编程
Python 人工智能 无监督学习:聚类
Python 人工智能 自然语言处理 (NLP)
Python 人工智能 NLTK(自然语言工具包)
Python 人工智能 分析时间序列数据
Python 人工智能 语音识别
Python 人工智能 启发式搜索
Python 人工智能 游戏
Python 人工智能 神经网络
Python 人工智能 强化学习
Python 人工智能 遗传算法
Python 人工智能 计算机视觉
Python 人工智能 深度学习

教程

Python 人工智能 入门概念
Python 人工智能 开始使用
Python 人工智能 机器学习
Python 人工智能 数据准备
Python 人工智能 监督学习:分类
Python 人工智能 监督学习:回归
Python 人工智能 逻辑编程
Python 人工智能 无监督学习:聚类
Python 人工智能 自然语言处理 (NLP)
Python 人工智能 NLTK(自然语言工具包)
Python 人工智能 分析时间序列数据
Python 人工智能 语音识别
Python 人工智能 启发式搜索
Python 人工智能 游戏
Python 人工智能 神经网络
Python 人工智能 强化学习
Python 人工智能 遗传算法
Python 人工智能 计算机视觉
Python 人工智能 深度学习

Python 人工智能 深度学习


上一章

人工神经网络(ANN)是一种高效的计算系统,其核心主题来源于生物神经网络的类比。神经网络是机器学习的一种模型。在20世纪80年代中期至90年代初期,神经网络架构有了很多重要的进步。在本章中,您将了解更多关于深度学习的知识,这是一种人工智能的方法。

深度学习随着过去十年计算能力的爆炸性增长而成为该领域的有力竞争者。因此,深度学习是一种特别的机器学习方法,其算法受到人脑结构和功能的启发。

机器学习对比深度学习

深度学习目前是最强大的机器学习技术。它之所以强大是因为它们能够在学习解决问题的同时学习最佳的问题表示方式。以下是深度学习和机器学习之间的比较:

对比项 深度学习(DL) 机器学习(ML)
数据依赖 当数据量大时,深度学习算法表现优异。 数据量增加对性能影响不大。
计算机依赖 需要高端机器才能完美运行。 可以在低端机器上运行。
特征提取 可以提取高级特征并从中学习。 需要有专家来识别大部分由机器学习提取的特征。
执行时间 由于参数更多,深度学习算法的执行时间更长,特别是训练时间。但测试时间少于机器学习算法。 参数较少,执行时间短。
解决问题的方式 深度学习解决端到端的问题。 机器学习采用传统的分解问题的方式来解决问题。

卷积神经网络(CNN)

卷积神经网络与普通神经网络相同,因为它们也由具有可学习权重和偏置的神经元组成。普通神经网络忽略了输入数据的结构,所有的数据都被转化为一维数组输入网络。这种方法适用于常规数据,但如果数据包含图像,则可能会变得繁琐。

CNN轻松解决了这一问题。当处理图像时,CNN考虑到了图像的二维结构,这使它们能够提取图像特有的属性。这样,CNN的主要目标就是从输入层的原始图像数据到输出层的正确类别。普通NN和CNN之间的唯一区别在于对输入数据的处理方式和层的类型。

CNN架构概述

在架构方面,普通神经网络接收输入并通过一系列隐藏层对其进行转换。每一层都通过神经元连接到另一层。普通神经网络的主要缺点是不能很好地扩展到完整的图像。

CNN的架构中的神经元按照宽度、高度和深度三个维度排列。当前层的每个神经元都连接到前一层输出的一小部分。这类似于在输入图像上叠加一个??×??的滤镜。使用??个滤镜是为了确保捕捉到所有的细节。这些??个滤镜是特征提取器,可以提取边缘、角落等特征。

构建CNN的层

以下层用于构建CNN:

  • 输入层 —— 接收原始图像数据。
  • 卷积层 —— 这是CNN的核心组件,执行大部分计算。该层计算神经元与输入中的各种补丁之间的卷积。
  • 修正线性单元层(ReLU) —— 对前一层的输出应用激活函数。它在网络中添加非线性元素,使其能够泛化任何类型的函数。
  • 池化层 —— 帮助我们在网络中保留重要部分。池化层独立地对输入的每一个深度切片进行操作,并对其进行空间上的重新调整大小。它使用MAX函数。
  • 全连接层/输出层 —— 计算最后一层的输出分数。最终输出的大小为1×1×?? ,其中?? 是训练数据集类别的数量。

安装有用的Python包

您可以使用Keras,这是一个用Python编写的高级神经网络API,可以在TensorFlow,CNTK或Theano之上运行。它支持Python 2.7-3.6。您可以从https://keras.io/了解更多信息。

使用以下命令安装Keras:

pip install keras

在conda环境中,您可以使用以下命令:

conda install -c conda-forge keras

使用ANN构建线性回归器

在本节中,您将学习如何使用人工神经网络构建线性回归器。您可以使用KerasRegressor实现这一点。在此示例中,我们使用包含波士顿房价数据集的13个数值属性。相应的Python代码如下:

导入所有必需的包

import numpy
import pandas
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasRegressor
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold

加载数据集

假设数据集保存在本地目录中。

dataframe = pandas.read_csv("/Usrrs/admin/data.csv", delim_whitespace=True, header=None)
dataset = dataframe.values

将数据划分为输入变量X和输出变量Y

X = dataset[:,0:13]
Y = dataset[:,13]

定义基准模型

def baseline_model():
    # 创建模型
    model_regressor = Sequential()
    model_regressor.add(Dense(13, input_dim=13, kernel_initializer='normal', activation='relu'))
    model_regressor.add(Dense(1, kernel_initializer='normal'))
    
    # 编译模型
    model_regressor.compile(loss='mean_squared_error', optimizer='adam')
    return model_regressor

设置随机种子以确保结果可重复

seed = 7
numpy.random.seed(seed)

使用scikit-learn作为回归估计器的Keras封装对象

estimator = KerasRegressor(build_fn=baseline_model, epochs=100, batch_size=5, verbose=0)
kfold = KFold(n_splits=10, random_state=seed)
baseline_result = cross_val_score(estimator, X, Y, cv=kfold)
print("Baseline: %.2f (%.2f) MSE" % (baseline_result.mean(), baseline_result.std()))

上述代码的输出将是模型对未见过的数据问题性能的估计。它将是均方误差,包括交叉验证评估过程中所有10个折叠的平均值和标准差。

图像分类器:深度学习的应用

卷积神经网络(CNNs)解决的是图像分类问题,即确定输入图像属于哪个类别。你可以使用 Keras 深度学习库。注意,我们使用的训练和测试数据集来自以下链接的猫和狗的图像:https://www.kaggle.com/c/dogs-vs-cats/data。

导入 Keras 库和包

首先,导入必要的 Keras 库和包:

from keras.models import Sequential
from keras.layers import Conv2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense

初始化神经网络

接下来,创建一个 Sequential 类的对象:

classifier = Sequential()

添加卷积层

然后,编写卷积部分的代码:

classifier.add(Conv2D(32, (3, 3), input_shape=(64, 64, 3), activation='relu'))

这里 relu 是整流函数。

添加池化层

接着,在卷积部分之后对结果特征图执行池化操作:

classifier.add(MaxPooling2D(pool_size=(2, 2)))

展平层

然后,使用展平将所有池化的图像转换成一个连续的向量:

classifier.add(Flatten())

添加全连接层

创建一个全连接层:

classifier.add(Dense(units=128, activation='relu'))

这里的 128 是隐藏单元的数量。通常定义隐藏单元的数量为 2 的幂次方。

初始化输出层

初始化输出层:

classifier.add(Dense(units=1, activation='sigmoid'))

编译 CNN

编译刚刚建立的 CNN:

classifier.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

这里的 optimizer 参数用于选择随机梯度下降算法,loss 参数用于选择损失函数,metrics 参数用于选择性能度量。

执行图像增强并拟合图像到神经网络

执行图像增强,并将图像拟合到神经网络:

train_datagen = ImageDataGenerator(
    rescale=1./255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True
)

test_datagen = ImageDataGenerator(rescale=1./255)

training_set = train_datagen.flow_from_directory(
    '/Users/admin/training_set',
    target_size=(64, 64),
    batch_size=32,
    class_mode='binary'
)

test_set = test_datagen.flow_from_directory(
    'test_set',
    target_size=(64, 64),
    batch_size=32,
    class_mode='binary'
)

拟合数据到模型

将数据拟合到创建的模型:

classifier.fit_generator(
    training_set,
    steps_per_epoch=8000,
    epochs=25,
    validation_data=test_set,
    validation_steps=2000
)

这里的 steps_per_epoch 表示训练图像的数量。

使用模型预测

现在模型已经被训练好了,我们可以用它来做预测:

from keras.preprocessing import image

test_image = image.load_img('dataset/single_prediction/cat_or_dog_1.jpg', target_size=(64, 64))

test_image = image.img_to_array(test_image)

test_image = np.expand_dims(test_image, axis=0)

result = classifier.predict(test_image)

training_set.class_indices

if result[0][0] == 1:
    prediction = 'dog'
else:
    prediction = 'cat'
上一章
阅读号二维码

关注阅读号

联系二维码

联系我们

© 2024 Yoagoa. All rights reserved.

粤ICP备18007391号

站点地图