当前位置: 首页 > news >正文

网站关键词快速优化域名查询阿里云

网站关键词快速优化,域名查询阿里云,婚纱摄影网站建设方案,找回微信一、说明 在这篇文章中,我们将展示如何在 TensorFlow 2.0 中实现基本的卷积神经网络 \(AlexNet\)。AlexNet 架构由 Alex Krizhevsky 设计,并与 Ilya Sutskever 和 Geoffrey Hinton 一起发布。并获得Image Net2012竞赛中冠军。 教程概述: 理论…

一、说明

       在这篇文章中,我们将展示如何在 TensorFlow 2.0 中实现基本的卷积神经网络 \(AlexNet\)。AlexNet 架构由 Alex Krizhevsky 设计,并与 Ilya Sutskever 和 Geoffrey Hinton 一起发布。并获得Image Net2012竞赛中冠军。

教程概述:

  1. 理论回顾
  2. 在 TensorFlow 2.0 中的实现

二 理论回顾

        现实生活中的计算机视觉问题需要大量高质量数据进行训练。过去,人们使用 CIFAR 和 NORB 数据集作为计算机视觉问题的基准数据集。然而,ImageNet竞赛改变了这一点。该数据集需要比以前更复杂的网络才能获得良好的结果。

        AlexNet 是 2012 年取得最佳结果的一种网络架构。它的 Top-5 错误率为 15.3%。第二好的成绩远远落后(26.2%)。

        该架构有大约 6000 万个参数,由以下层组成。

图层类型特征图尺寸内核大小跨步激活
图像1227×227
卷积9655×5511×114ReLU
最大池化9627×273×32
卷积25627×275×51ReLU
最大池化25613×133×32
卷积第384章13×133×31ReLU
卷积第384章13×133×31ReLU
卷积25613×133×31ReLU
最大池化2566×63×32
完全连接4096ReLU
完全连接4096ReLU
完全连接1000软最大

        在我们的例子中,我们将仅在 ImageNet 数据集中的两个类上训练模型,因此我们的最后一个全连接层将只有两个具有 Softmax 激活函数的神经元。

        有一些变化使得 AlexNet 与当时的其他网络不同。让我们看看是什么改变了历史!

2.1  重叠的池化层

        标准池化层汇总同一内核图中相邻神经元组的输出。传统上,相邻池单元总结的邻域不重叠。重叠池化层与标准池化层类似,只是计算 Max 的相邻窗口彼此重叠。

重叠池化与非重叠池化

2.2 ReLU 非线性

        评估神经元输出的传统方法是使用 sigmoid 或 tanh 激活函数。这两个函数固定在最小值和最大值之间,因此它们是饱和非线性的。然而,在 AlexNet 中,使用了修正线性单位函数,或者简称为 \(ReLU\)。该函数的阈值为\(0\)。这是一个非饱和激活函数。

        \(ReLU\) 函数需要更少的计算并允许更快的学习,这对在大型数据集上训练的大型模型的性能有很大影响。

2.3  局部响应标准化

        局部响应归一化 (LRN) 首次在 AlexNet 架构中引入,其中选择的激活函数是 \(ReLU\)。使用 LRN 的原因是为了鼓励 侧向抑制。 这是指神经元减少其邻居活动的能力。当我们使用 ReLU 激活函数处理神经元时,这非常有用。具有 \(ReLU\) 激活函数的神经元具有无界激活,我们需要 LRN 对其进行标准化。

三. TensorFlow 2.0中的实现

        交互式 Colab 笔记本可在以下链接找到

        让我们从导入所有必需的库开始

# Load the TensorBoard notebook extension
%load_ext tensorboard
import datetime
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as pltfrom tensorflow.keras import Model
from tensorflow.keras.models import Sequential
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.losses import categorical_crossentropy
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPooling2D, Dropout

        导入后,我们需要准备数据。在这里,我们将仅使用 ImageNet 数据集的一小部分。使用以下代码,您可以下载所有图像并将它们存储在文件夹中。

import cv2
import urllib
import requests
import PIL.Image
import numpy as np
from bs4 import BeautifulSoup#ship synset
page = requests.get("http://www.image-net.org/api/text/imagenet.synset.geturls?wnid=n04194289")
soup = BeautifulSoup(page.content, 'html.parser')
#bicycle synset
bikes_page = requests.get("http://www.image-net.org/api/text/imagenet.synset.geturls?wnid=n02834778")
bikes_soup = BeautifulSoup(bikes_page.content, 'html.parser')str_soup=str(soup)
split_urls=str_soup.split('\r\n')bikes_str_soup=str(bikes_soup)
bikes_split_urls=bikes_str_soup.split('\r\n')!mkdir /content/train
!mkdir /content/train/ships
!mkdir /content/train/bikes
!mkdir /content/validation
!mkdir /content/validation/ships
!mkdir /content/validation/bikesimg_rows, img_cols = 32, 32
input_shape = (img_rows, img_cols, 3)def url_to_image(url):resp = urllib.request.urlopen(url)image = np.asarray(bytearray(resp.read()), dtype="uint8")image = cv2.imdecode(image, cv2.IMREAD_COLOR)return imagen_of_training_images=100
for progress in range(n_of_training_images):if not split_urls[progress] == None:try:I = url_to_image(split_urls[progress])if (len(I.shape))==3:save_path = '/content/train/ships/img'+str(progress)+'.jpg'cv2.imwrite(save_path,I)except:Nonefor progress in range(n_of_training_images):if not bikes_split_urls[progress] == None:try:I = url_to_image(bikes_split_urls[progress])if (len(I.shape))==3:save_path = '/content/train/bikes/img'+str(progress)+'.jpg'cv2.imwrite(save_path,I)except:Nonefor progress in range(50):if not split_urls[progress] == None:try:I = url_to_image(split_urls[n_of_training_images+progress])if (len(I.shape))==3:save_path = '/content/validation/ships/img'+str(progress)+'.jpg'cv2.imwrite(save_path,I)except:Nonefor progress in range(50):if not bikes_split_urls[progress] == None:try:I = url_to_image(bikes_split_urls[n_of_training_images+progress])if (len(I.shape))==3:save_path = '/content/validation/bikes/img'+str(progress)+'.jpg'cv2.imwrite(save_path,I)except:None

        现在我们可以创建一个网络。原始 AlexNet 的最后一层有 1000 个神经元,但这里我们只使用一个。这是因为我们只将图像用于两个类。为了构建我们的卷积神经网络,我们将使用 Sequential API。

num_classes = 2# AlexNet model
class AlexNet(Sequential):def __init__(self, input_shape, num_classes):super().__init__()self.add(Conv2D(96, kernel_size=(11,11), strides= 4,padding= 'valid', activation= 'relu',input_shape= input_shape,kernel_initializer= 'he_normal'))self.add(MaxPooling2D(pool_size=(3,3), strides= (2,2),padding= 'valid', data_format= None))self.add(Conv2D(256, kernel_size=(5,5), strides= 1,padding= 'same', activation= 'relu',kernel_initializer= 'he_normal'))self.add(MaxPooling2D(pool_size=(3,3), strides= (2,2),padding= 'valid', data_format= None)) self.add(Conv2D(384, kernel_size=(3,3), strides= 1,padding= 'same', activation= 'relu',kernel_initializer= 'he_normal'))self.add(Conv2D(384, kernel_size=(3,3), strides= 1,padding= 'same', activation= 'relu',kernel_initializer= 'he_normal'))self.add(Conv2D(256, kernel_size=(3,3), strides= 1,padding= 'same', activation= 'relu',kernel_initializer= 'he_normal'))self.add(MaxPooling2D(pool_size=(3,3), strides= (2,2),padding= 'valid', data_format= None))self.add(Flatten())self.add(Dense(4096, activation= 'relu'))self.add(Dense(4096, activation= 'relu'))self.add(Dense(1000, activation= 'relu'))self.add(Dense(num_classes, activation= 'softmax'))self.compile(optimizer= tf.keras.optimizers.Adam(0.001),loss='categorical_crossentropy',metrics=['accuracy'])model = AlexNet((227, 227, 3), num_classes)

        创建模型后,我们定义一些重要的参数以供以后使用。此外,让我们创建图像数据生成器。\(AlexNet\)的参数非常多,有6000万个,这是一个巨大的数字。如果没有足够的数据,这将很可能导致过度拟合。因此,在这里,我们将利用数据增强技术,您可以在此处找到更多相关信息。

        出于同样的原因,AlexNet 中使用了 dropout 层。该技术包括以预定概率“关闭”神经元。这迫使每个神经元具有更强大的特征,可以与其他神经元一起使用。我们不会在这里使用 dropout 层,因为我们不会使用整个数据集。

# some training parameters
EPOCHS = 100
BATCH_SIZE = 32
image_height = 227
image_width = 227
train_dir = "train"
valid_dir = "validation"
model_dir = "my_model.h5"

train_datagen = ImageDataGenerator(rescale=1./255,rotation_range=10,width_shift_range=0.1,height_shift_range=0.1,shear_range=0.1,zoom_range=0.1)train_generator = train_datagen.flow_from_directory(train_dir,target_size=(image_height, image_width),color_mode="rgb",batch_size=BATCH_SIZE,seed=1,shuffle=True,class_mode="categorical")valid_datagen = ImageDataGenerator(rescale=1.0/255.0)
valid_generator = valid_datagen.flow_from_directory(valid_dir,target_size=(image_height, image_width),color_mode="rgb",batch_size=BATCH_SIZE,seed=7,shuffle=True,class_mode="categorical")
train_num = train_generator.samples
valid_num = valid_generator.samples

        现在我们可以设置TensorBoard并开始训练我们的模型。这样我们就可以实时跟踪模型性能。

log_dir="logs/fit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir)
callback_list = [tensorboard_callback]# start training
model.fit(train_generator,epochs=EPOCHS,steps_per_epoch=train_num // BATCH_SIZE,validation_data=valid_generator,validation_steps=valid_num // BATCH_SIZE,callbacks=callback_list,verbose=0)# save the whole model
model.save(model_dir)%tensorboard --logdir logs/fit

        让我们使用我们的模型进行一些预测并将其可视化。

class_names = ['bike', 'ship']x_valid, label_batch  = next(iter(valid_generator))prediction_values = model.predict_classes(x_valid)# set up the figure
fig = plt.figure(figsize=(10, 6))
fig.subplots_adjust(left=0, right=1, bottom=0, top=1, hspace=0.05, wspace=0.05)# plot the images: each image is 227x227 pixels
for i in range(8):ax = fig.add_subplot(2, 4, i + 1, xticks=[], yticks=[])ax.imshow(x_valid[i,:],cmap=plt.cm.gray_r, interpolation='nearest')if prediction_values[i] == np.argmax(label_batch[i]):# label the image with the blue textax.text(3, 17, class_names[prediction_values[i]], color='blue', fontsize=14)else:# label the image with the red textax.text(3, 17, class_names[prediction_values[i]], color='red', fontsize=14)

 

四、概括

        在这篇文章中,我们展示了如何在 TensorFlow 2.0 中实现 \(AlexNet\)。我们只使用了 ImageNet 数据集的一部分,这就是为什么我们没有得到最好的结果。为了获得更高的准确性,需要更多的数据和更长的训练时间。

参考资料:

 数据黑客变种rs    深度学习 机器学习 TensorFlow    2020 年 2 月 29 日  |  0

http://www.hkea.cn/news/30181/

相关文章:

  • 网站备案信息加到哪里如何进行网站推广
  • 昭通网站制作aso优化技巧
  • 制作网站时怎样做滚动字幕新网站多久会被百度收录
  • 余姚物流做网站微信指数是搜索量吗
  • 怎样做网站轮播今日国内重大新闻事件
  • 想给大学做网站百度网盘搜索神器
  • jsp网站开发论文官方app下载安装
  • 关于机场建设的网站今日疫情最新情况
  • 网站域名注册服务商google浏览器官方
  • 通过网站开发工具怎么改自动跳网站百度指数有哪些功能
  • 可以发锚文本的网站百度搜索官方网站
  • 东莞网站建设企慕简述如何优化网站的方法
  • 可以做网站的公司seo外包
  • 自己怎么做网站视频赚钱5g网络优化培训
  • 数据库修改网站管理员密码seo网站有优化培训吗
  • 福田做商城网站建设找哪家公司好抖音怎么运营和引流
  • 厘米售卡站怎么做网站禁止搜索引擎收录的方法
  • 网站首页滚动图片怎么做谷歌搜索关键词排名
  • 嵩县网站开发友情链接获取的途径有哪些
  • 国家企业信息公示网(广东)海南快速seo排名优化
  • 高端网站设计 上海徐州seo排名公司
  • 泰安网站建设公司排名石家庄最新消息
  • 域名只做邮箱没网站要备案吗常见的网络推广方式包括
  • 昆山建设局网站360搜索首页
  • 正常做网站多少钱无锡网站制作无锡做网站
  • php做网站csdn网站seo公司哪家好
  • 今日头条建站工具何鹏seo
  • wordpress 培训模板优化落实疫情防控新十条
  • 关于做外汇现货的网站太原整站优化排名外包
  • 星悦做任务网站是新网站百度收录