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

深度学习经历了十年来爆炸性的计算增长,成为该领域的有力竞争者。因此,深度学习是一种特殊的机器学习,其算法受到人脑结构和功能的启发。

机器学习与深度学习

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

数据依赖性

第一个区别是数据规模增加时深度学习和机器学习的性能。当数据量很大时,深度学习算法表现得非常好。

机器依赖性

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

特征提取

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

执行时间

执行时间取决于算法中使用的众多参数。深度学习比机器学习算法有更多的参数。因此,深度学习算法的执行时间,特别是训练时间,比机器学习算法要长得多。但深度学习算法的测试时间少于机器学习算法。

解决问题的方法

深度学习端到端地解决问题,而机器学习则使用传统的方法来解决问题,即将问题分解为多个部分。

卷积神经网络(CNN)

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

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

CNN 的架构概述

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

CNN 的架构将神经元排列成 3 个维度,称为宽度、高度和深度。当前层中的每个神经元都连接到前一层输出的一小部分。它类似于在输入图像上叠加𝑵×𝑵过滤器。它使用M过滤器来确保获取所有详细信息。这M个滤波器是特征提取器,可以提取边缘、角点等特征。

用于构建 CNN 的层

以下各层用于构建 CNN –

  • 输入层– 它按原样获取原始图像数据。
  • 卷积层– 该层是 CNN 的核心构建块,负责执行大部分计算。该层计算神经元和输入中的各个补丁之间的卷积。
  • 整流线性单元层– 它将激活函数应用于前一层的输出。它为网络添加了非线性,以便它可以很好地推广到任何类型的函数。
  • 池化层– 随着网络的进展,池化帮助我们只保留重要的部分。池化层在输入的每个深度切片上独立运行,并在空间上调整其大小。它使用 MAX 函数。
  • 全连接层/输出层– 该层计算最后一层的输出分数。生成的输出大小为𝟏×𝟏×𝑳,其中 L 是训练数据集类的数量。

安装有用的 Python 包

您可以使用Keras,它是一种高级神经网络 API,用 Python 编写,能够在 TensorFlow、CNTK 或 Theno 上运行。它与Python 2.7-3.6兼容。

使用以下命令安装 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 包装对象称为KerasRegressor。在本节中,我们将使用标准化数据集评估该模型。

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 库和包,如下所示 –

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

from keras.models import Sequential

下面称为Conv2D的包用于执行卷积运算,这是 CNN 的第一步。

from keras.layers import Conv2D

下面名为MaxPoling2D的包用于执行池化操作,这是 CNN 的第二步。

from keras.layers import MaxPooling2D

下面的名为Flatten 的包是将所有生成的 2D 数组转换为单个长连续线性向量的过程。

from keras.layers import Flatten

下面称为Dense的包用于执行神经网络的全连接,即 CNN 的第四步。

from keras.layers import Dense

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

S_classifier = Sequential()

现在,下一步是对卷积部分进行编码。

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

这里relu是整流器函数。

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

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

现在,使用展平将所有池化图像转换为连续向量 –

S_classifier.add(Flatten())

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

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

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

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

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

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

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

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

现在,执行图像增强,然后将图像拟合到神经网络 –

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'

 

人工智能与Python深度学习 推荐

领券有优惠