带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'
相关推荐
Jmayday几秒前
Pytorch:RNN理论基础
pytorch·rnn·深度学习
Captaincc11 分钟前
转发-中央网信办部署开展“清朗·整治AI应用乱象”专项行动
人工智能·vibecoding
AI自动化工坊23 分钟前
Late框架技术深度解析:5GB VRAM实现10倍AI编码效率的工程架构
人工智能·5g·架构·ai编程·late
我是大聪明.40 分钟前
DeepSeek V4 Pro + 华为昇腾910:国产大模型落地的性能实测与深度解析
人工智能·华为
2301_800976931 小时前
正则表达式
开发语言·python·正则表达式
机器之心1 小时前
Generalist之后,罗剑岚团队推出LWD,也要变革具身智能训练范式
人工智能·openai
IT_陈寒1 小时前
Vite的public文件夹放静态资源?这坑我替你踩了
前端·人工智能·后端
传说故事1 小时前
【论文阅读】Diffusion Forcing: Next-token Prediction Meets Full-Sequence Diffusion
论文阅读·人工智能·diffusion
码界奇点1 小时前
基于Python的新浪微博数据爬虫系统设计与实现
数据库·爬虫·python·毕业设计·新浪微博·源代码管理
xixixi777771 小时前
三重筑基:5G-A超级上行提速千兆,电联低频共享扫平盲点,800V HVDC算电协同破局
人工智能·5g·ai·大模型·算力·通信·信通院