打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
利用Python和Tensorflow构建卷积神经网络的9个步骤

卷积神经网络通常被称为ConvNets,它是一种神经网络架构,主要用于图像分类,而ConvNets在图像方面非常好。ConvNets的灵感来自人类视觉皮质,现在让我们深入了解架构

#1:打开一个Jupyter NoteBook

您可以在工作目录上创建一个新的NoteBook购买开放终端,然后输入“jupyter notebook”,然后会出现一个弹出窗口,点击“新建 - > Python3”

#2:导入Python必要的依赖关系并声明数据源

import tensorflow as tfimport matplotlib.pyplot as plt%matplotlib inlinefrom tqdm import tqdmimport numpy as npimport os from random import shuffleimport cv2 TEST_DIR = '/projects/My projects/dogs vs cats/test'TRAIN_DIR = '/projects/My projects/dogs vs cats/train'LEARNING_RATE = 1e-3MODEL_NAME = 'dogsvscats-{}-{}.model'.format(LEARNING_RATE,'6conv-fire')IMAGE_SIZE = 50
  • Tensorflow:Tensorflow是Google的一个深度学习框架,它允许我们构建和部署神经网络模型
  • Matplotlib:Matplotlib是一个数据可视化库
  • Numpy:Numpy是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

#3:标记我们的数据

默认情况下,我们的数据集带有“cat”或“dog”的标签,但是我们不能 将字符串或字符FeedIn到我们的神经网络中,所以我们必须转换然后转换为向量,我们可以通过以下Python代码完成:

def label_image(img): img_name = img.split('.')[-3] if img_name == 'cat': return [1,0] elif img_name == 'dog': return [0,1]

#4:创建我们的训练和测试集

我们有猫和狗的图像,但我们不能直接输入这些图像所以我们必须将它们转换成矩阵,我们可以通过以下Python代码执行计算:

#This is for Training Data def train_data_loder(): training_data = [] for img in tqdm(os.listdir(path=TRAIN_DIR)): img_lable = label_image(img) path_to_img = os.path.join(TRAIN_DIR,img) img = cv2.resize(cv2.imread(path_to_img,cv2.IMREAD_GRAYSCALE),(IMAGE_SIZE,IMAGE_SIZE)) training_data.append([np.array(img),np.array(img_lable)]) shuffle(training_data) np.save('training_data_new.npy',training_data) return training_data #This is for Testing Data def testing_data(): test_data = [] for img in tqdm(os.listdir(TEST_DIR)): img_labels = img.split('.')[0] path_to_img = os.path.join(TEST_DIR,img) img = cv2.resize(cv2.imread(path_to_img,cv2.IMREAD_GRAYSCALE),(IMAGE_SIZE,IMAGE_SIZE)) test_data.append([np.array(img),np.array(img_labels)]) shuffle(test_data) np.save('test_dataone.npy',test_data) return test_data

RGB和灰度比较

在知道如何将图像更改为矢量之前,我们必须知道如何存储和查看图像。图像是 RBG(红色,绿色和蓝色)的组合,所以基本上,我们必须将三个颜色通道输入我们的ConvNet,我们可以做到这一点,但计算成本太高(即)过多的复杂计算过程可能需要Hi-Performance GPU 和Stuffs,但是对于这个特殊的任务,我们可以用更简单和高效的方式做事,所以我们在OpenCV的帮助下将RGB图像改变为灰度图像,它只包含一个颜色通道。

由于我们已经对我们的图像进行了Grayscaling,因此我们必须将图像reshape为50 x 50图像,同时降低我们的计算功能,然后我们将其附加到我们的列表中

#5:编码我们的卷积神经网络模型

这里有趣的部分,编写我们的模型,我们必须导入所有帮助我们构建ConvNet模型的依赖项。

import tflearnfrom tflearn.layers.conv import conv_2d,max_pool_2dfrom tflearn.layers.core import input_data,dropout,fully_connectedfrom tflearn.layers.estimator import regression

MAX POOLING

我们将使用TfLearn来构建我们的模型。首先,我们从layers.conv中导入conv_2d,因为它实际上是我们的卷积模型它是预构建的max_pool_2d用于使用最大池技术

然后,我们从layers.core导入input_data、dropout、fully_connected模块,DropOut是一种很酷的方法,通过在训练过程中随机关闭神经元来提高我们的模型精度,而完全连接层允许我们使用Softmax函数进行最终预测。

#6:建立一个ConvNet

import tensorflow as tftf.reset_default_graph() convnet = input_data(shape=[None, IMAGE_SIZE, IMAGE_SIZE, 1], name='input')#Conv Layer 1convnet = conv_2d(convnet, 32, 5, activation='relu')convnet = max_pool_2d(convnet, 5)#Conv Layer 2convnet = conv_2d(convnet, 64, 5, activation='relu')convnet = max_pool_2d(convnet, 5)#Conv Layer 3convnet = conv_2d(convnet, 128, 5, activation='relu')convnet = max_pool_2d(convnet, 5)#Conv Layer 4convnet = conv_2d(convnet, 64, 5, activation='relu')convnet = max_pool_2d(convnet, 5)#Conv Layer 5convnet = conv_2d(convnet, 32, 5, activation='relu')convnet = max_pool_2d(convnet, 5)#Conv Layer 6convnet = fully_connected(convnet, 1024, activation='relu')convnet = dropout(convnet, 0.8)#Fully Connected Layer with SoftMax as Activation Functionconvnet = fully_connected(convnet, 2, activation='softmax')#Regression for ConvNet with ADAM optimizer convnet = regression(convnet, optimizer='adam', learning_rate=LEARNING_RATE, loss='categorical_crossentropy', name='targets') model = tflearn.DNN(convnet, tensorboard_dir='log')

现在,我们已经创建了ConvNet模型。首先,我们声明了输入函数,它接受输入数据的格式,然后我们声明了5个卷积层,我们使用了ReLu

ReLu激活h函数

在第6层,我们已使用Softmax将ConvLayer转换为全连接层以进行我们的预测。最后,我们声明“ Adam ”用于优化目的

#7:拆分我们的测试和训练数据

train = train_data_g[:-500]test = train_data_g[-500:] #This is our Training dataX = np.array([i[0] for i in train]).reshape(-1,IMAGE_SIZE,IMAGE_SIZE,1)Y = [i[1] for i in train] #This is our Training datatest_x = np.array([i[0] for i in test]).reshape(-1,IMAGE_SIZE,IMAGE_SIZE,1)test_y = [i[1] for i in test]

将数据分割成测试和训练集是很重要的,为了训练和验证我们的模型,我们将它转换成NumPy数组,以便于实际数据和类存储在X和y变量中

#8:训练我们的模型来识别猫和狗

model.fit(X, Y, n_epoch=6, validation_set=(test_x, test_y), snapshot_step=500, show_metric=True, run_id=MODEL_NAME)

我们最终将我们的数据拟合到我们之前编码的卷积神经网络模型中,我们的模型要训练6个Epochs

一旦你运行这行Python代码下面你会看到这个结果

#9:保存我们的模型

所有这些过程中最重要的一步是保存我们的模型供以后使用,TFLearn通过以下代码

model.save(MODEL_NAME)

这就是你如何编码你自己的卷积神经网络模型来识别给定图像中的猫和狗

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
搭建和部署手语AI识别系统
【Keras速成】Keras图像分类从模型自定义到测试
keras CAM和Grad-cam原理简介与实现
基于OpenCV的焊件缺陷检测
花式自动编码器
该使用Python、TensorFlow和Keras来进行垃圾分类?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服