带Python的人工智能——深度学习

人工神经网络(ANN)是一种高效的计算系统,其核心主题借鉴了生物神经网络的类比。神经网络是机器学习的一种模型类型。在20世纪80年代中期和90年代初,神经网络取得了许多重要的架构进步。在本章中,你将深入了解深度学习,这是一种人工智能的方法。

深度学习源自数十年计算爆炸性增长,成为该领域的有力竞争者。因此,深度学习是一种特殊的机器学习,其算法灵感来源于人脑的结构和功能。

机器学习与深度学习

深度学习是当今最强大的机器学习技术。它之所以强大,是因为他们在学习如何解决问题的同时,学会了最佳的表达问题方式。深度学习与机器学习的比较如下 −

数据依赖

第一个区别点基于数据规模增加时DL和ML的性能。当数据量很大时,深度学习算法表现非常好。

机器依赖

深度学习算法需要高端机器才能完美运行。另一方面,机器学习算法也可以在低端设备上工作。

特征提取

深度学习算法可以提取高层特征并尝试从中学习。另一方面,专家需要识别机器学习提取的大部分特征。

执行时间

执行时间取决于算法中使用的众多参数。深度学习的参数比机器学习算法更多。因此,DL算法的执行时间,尤其是训练时间,远远超过机器学习算法。但深度学习算法的测试时间比机器学习算法短。

问题解决方法

深度学习从头到尾解决问题,而机器学习则采用传统的解决问题方式,即将其拆解为多个部分。

卷积神经网络(CNN)

卷积神经网络与普通神经网络相同,因为它们同样由具有可学习权重和偏差的神经元组成。普通神经网络忽略输入数据的结构,所有数据在输入网络前都会被转换为一维数组。该过程适用于常规数据,但如果数据包含图像,过程可能会繁琐。

CNN轻松解决了这个问题。它在处理图像时考虑了图像的二维结构,从而能够提取图像特有的属性。通过这种方式,CNN的主要目标是从输入层的原始图像数据过渡到输出层的正确类别。普通神经网络和CNN的唯一区别在于输入数据的处理方式和层的类型。

CNN的架构概述

在结构上,普通神经网络接收输入并通过一系列隐藏层进行转换。每一层通过神经元的帮助与另一层相连。普通神经网络的主要缺点是它们不适合扩展到完整图像。

CNN的架构中,神经元按三维结构排列,分别是宽度、高度和深度。当前层的每个神经元都连接到上一层输出的一小块。这类似于在输入图像上叠加滤波器。它使用M 滤波器以确保获得所有细节。这些M滤波器是特征提取器,提取边缘、角点等特征。

用于构建卷积神经网络的层

以下层用于构建卷积神经网络 −

  • 输入层 − 它直接接收原始图像数据。

  • 卷积层 − 这一层是卷积神经网络的核心构建模块,负责大部分计算。这一层计算神经元与输入中各个片段之间的卷积。

  • 整流线性单位层 − 它对前一层的输出应用激活函数。它为网络增加了非线性,使其能够很好地推广到任何类型的函数。

  • 池层 − 池化帮助我们在网络中只保留重要部分。池层独立于输入的每个深度切片上工作,并在空间上调整其大小。它使用了MAX功能。

  • 全连通层/输出层− 该层计算最后一层的输出分数。最终输出大小为 ,其中 L 是训练数据集的数量。

安装有用的 Python 包

你可以用Keras ,这是一个用Python编写的高级神经网络API,可以运行在TensorFlow、CNTK或Theno之上。它兼容 Python 2.7-3.6。你可以从 https://keras.io/ 了解更多。

使用以下命令安装keras−

python 复制代码
pip install keras

conda环境下,你可以使用以下命令 −

python 复制代码
conda install c conda-forge keras

利用人工神经网络构建线性回归器

在本节中,你将学习如何利用人工神经网络构建线性回归器。你可以用KerasRegressor来实现这个目标。在这个例子中,我们使用波士顿房价数据集,其中有13个数值数据,针对波士顿的房产。该 Python 代码如下所示 −

导入所有所需软件包,如图所示 −

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

现在,加载保存在本地目录中的数据集。

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

现在,将数据分为输入和输出变量,即X和Y −

python 复制代码
X = dataset[:,0:13]
Y = dataset[:,13]

由于我们使用基线神经网络,定义模型−

python 复制代码
def baseline_model():

现在,创建模型如下 −

python 复制代码
model_regressor = Sequential()
model_regressor.add(Dense(13, input_dim = 13, kernel_initializer = 'normal', 
   activation = 'relu'))
model_regressor.add(Dense(1, kernel_initializer = 'normal'))

接着,编译模型−

python 复制代码
model_regressor.compile(loss='mean_squared_error', optimizer='adam')
return model_regressor

现在,将随机种子固定为以下可重复性 −

python 复制代码
model_regressor.compile(loss='mean_squared_error', optimizer='adam')
return model_regressor

现在,将随机种子固定为以下可重复性 −

python 复制代码
seed = 7
numpy.random.seed(seed)

用于 scikit-learn 的 Keras 包装对象称为 KerasRegressor。在本节中,我们将用标准化数据集来评估该模型。

python 复制代码
estimator = KerasRegressor(build_fn = baseline_model, nb_epoch = 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个折面的平均和标准差。

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

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

导入重要的 Keras 库和包,如图所示 −

以下称为sequential的包将以顺序网络初始化神经网络。

python 复制代码
from keras.models import Sequential

以下称为Conv2D的包用于执行卷积作,即CNN的第一步。

python 复制代码
from keras.layers import Conv2D

以下软件包称为MaxPoling2D,用于执行池化作,这是CNN的第二步。

python 复制代码
from keras.layers import MaxPooling2D

以下软件包称为Flatten,是将所有所得二维数组转换为单一长连续线性向量的过程。

python 复制代码
from keras.layers import Flatten

以下称为Dense的软件包用于实现神经网络的全连接,这是CNN的第四步。

python 复制代码
from keras.layers import Dense

现在,创建一个顺序类对象。

python 复制代码
S_classifier = Sequential()

接下来,是编写卷积部分。

python 复制代码
S_classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))

这里 relu 是整流函数。

现在,CNN的下一步是在卷积部分后对所得特征映射进行池化作。

python 复制代码
S-classifier.add(MaxPooling2D(pool_size = (2, 2)))

现在,利用 恭维化 − 将所有合并的图像转换为连续向量

python 复制代码
S_classifier.add(Flatten())

接下来,创建一个全连通的层。

python 复制代码
S_classifier.add(Dense(units = 128, activation = 'relu'))

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

现在,初始化输出层如下 −

python 复制代码
S_classifier.add(Dense(units = 1, activation = 'sigmoid'))

现在,编译CNN,我们已经构建了------

python 复制代码
S_classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

这里的优化参数是选择随机梯度下降算法,损失参数是选择损失函数,度量参数是选择性能指标。

现在,进行图像增强,然后将图像拟合到神经网络中------

python 复制代码
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')

现在,将数据拟合到我们创建的模型------

python 复制代码
classifier.fit_generator(training_set,steps_per_epoch = 8000,epochs = 
25,validation_data = test_set,validation_steps = 2000)

这里steps_per_epoch训练图像的数量。

现在模型已经训练好,我们可以用它进行如下预测 −

python 复制代码
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'
相关推荐
AC赳赳老秦2 小时前
财务数据智能解读:DeepSeek分析利润表生成异常波动原因报告
数据库·人工智能·postgresql·zookeeper·测试用例·时序数据库·deepseek
沛沛老爹2 小时前
Web开发者进阶AI:Advanced-RAG上下文压缩与过滤原理及实战应用
人工智能·rag·faq·文档细粒度·自适应切分
Dontla2 小时前
2025 年个人成长与技术年度总结
人工智能
胡伯来了2 小时前
07 - 数据收集 - 网页采集工具Scrapy
python·scrapy·数据采集
御水流红叶2 小时前
第七届金盾杯(第一次比赛)wp
开发语言·python
小徐Chao努力2 小时前
【Langchain4j-Java AI开发】04-AI 服务核心模式
java·人工智能·python
好奇龙猫2 小时前
【人工智能学习-AI-MIT公开课-第5. 搜索:最优、分支限界、A**】
人工智能·学习
白日做梦Q2 小时前
预训练模型微调(Finetune)实战:策略、技巧及常见误区规避
人工智能·python·神经网络·机器学习·计算机视觉
历程里程碑2 小时前
双指针巧解LeetCode接雨水难题
java·开发语言·数据结构·c++·python·flask·排序算法