Python深度学习 Python计算机视觉 人工神经网络(ANN)是一种高效的计算系统,其中心主题借鉴了生物神经网络的类比。神经网络是机器学习的一种模型。在20世纪80年代中期和90年代初期,在神经网络中进行了许多重要的建筑改进。在本章中,您将了解有关深度学习的更多信息,这是一种人工智能的方法。 深度学习源自十年来爆炸性的计算增长,成为该领域的一个重要竞争者。因此,深度学习是一种特殊的机器学习,其算法受到人脑结构和功能的启发。 机器学习vs深度学习 如今,深度学习是最强大的机器学习技术。它非常强大,因为他们在学习如何解决问题的同时学习了表达问题的最佳方法。深度学习和机器学习的比较如下 - 数据依赖性 第一个不同点是基于数据规模增加时DL和ML的性能。当数据量很大时,深度学习算法的表现非常好。 机器依赖 深度学习算法需要高端机器才能完美运行。另一方面,机器学习算法也可以在低端机器上运行。 特征提取 深度学习算法可以提取高级功能,并尝试从中学习。另一方面,需要专家识别机器学习提取的大多数特征。 执行时间 执行时间取决于算法中使用的众多参数。深度学习比机器学习算法具有更多参数。因此,DL算法的执行时间,特别是训练时间,远远超过ML算法。但DL算法的测试时间少于ML算法。 解决问题的方法 深度学习解决了端到端的问题,而机器学习使用传统的解决问题的方法,即将其分解为部分。 卷积神经网络(CNN) 卷积神经网络与普通神经网络相同,因为它们也由具有可学习权重和偏差的神经元组成。普通的神经网络忽略了输入数据的结构,所有数据在送入网络之前都被转换成1-D阵列。此过程适合常规数据,但是如果数据包含图像,则该过程可能很麻烦。 CNN很容易解决这个问题。它在处理图像时将图像的2D结构考虑在内,这允许它们提取特定于图像的属性。这样,CNN的主要目标是从输入层中的原始图像数据转到输出层中的正确类。普通NN和CNN之间的唯一区别在于输入数据的处理和层的类型。 CNN架构概述 在结构上,普通的神经网络接收输入并通过一系列隐藏层对其进行转换。在神经元的帮助下,每一层都与另一层相连。普通神经网络的主要缺点是它们不能很好地扩展到完整图像。 CNN的结构具有以3维度排列的神经元,称为宽度,高度和深度。当前层中的每个神经元都连接到前一层输出的一小块。它类似于在输入图像上叠加NxN滤镜。它使用M个过滤器来确保获取所有细节。这些M滤镜是特征提取器,可以提取边缘,角落等特征。 用于构建CNN的层 以下层用于构建CNN 输入图层 - 按原样获取原始图像数据。 卷积层 - 该层是CNN的核心构建块,可执行大部分计算。该层计算神经元与输入中各种补丁之间的卷积。 整流线性单元层 - 它将激活功能应用于前一层的输出。它为网络增加了非线性,因此它可以很好地概括为任何类型的功能。 池化层 - 池化有助于我们在网络中保持重要部分。池化层在输入的每个深度切片上独立运行,并在空间上调整大小。它使用MAX功能。 完全连接的图层/输出图层 - 此图层计算最后一层的输出分数。结果输出的大小为1x1xL,其中L是训练数据集类的数量。 安装有用的Python包 你可以使用Keras,这是一个高级神经网络API,用Python编写,能够运行在TensorFlow,CNTK或Theno之上。它与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包装器对象称为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计算机视觉