深度学习与计算机视觉四

进入实战阶段,用一个HELLO WORLD级别的神经网络小例子来进行一个最基本的训练和预测的流程,以及MXNet和Caffe这两种框架的基本使用。

1.MXnet实现一个神经网络

1.1基础工具,NVIDIA驱动和cuda安装
首先是安装一些开发工具包,比如git ,atlas和图可视化的graphviz等等,执行下列命令行就行:

sudo apt update
sudo apt install build-essential git libatlas-base-dev
sudo pip install graphviz

并且开始安装NVIDIA的GPU和配套的GPU编程工具包CUDA
要先卸载系统自己的驱动

sudo apt --purge remove xserver-xorg-video-nouveau

再添加NVIDIA驱动的源

sudo add-apt-repository ppa:graphics-drivers/ppa

再安装驱动cuda工具包了

sudo apt install nvidia-361 nvidai-settings nvidia-prime sudo apt
install nvidia-suda-toolkit

安装完成后,在控制台输入:

nvidia-smi

1.2 安装MXNet
直接输入命令

git clone --recursive https://github.com/dmlc/mxnet

第一步是配置安装的基础选项,打开mxnet/make文件夹中的config.mk文件,配置以下内容

USE_CUDA =0;
USE_CUDNN=0;
USE_BLAS=atlas;

但是在训练网络的需求之下,一般要把USE_CUDA改成1,如果需要cuDNN和mkl的话,就需要把USE_CUDNN改成1,USE_BLAS改成mkl。
配置好了之后,就可以开始安装了

cd mexnet/setup-utils
sh install-mxnet-ubuntu-python.sh

等结束就大功告成,回到mxnet目录

cd mxnet
make -j

1.3MXNet 基本使用
一般有两种方式,一种是命令式,一种是符号式。命令式的计算是非常灵活直接的,每个变量的内存分配都是即时完成的,计算也是即时完成的,而符号式是函数编程的思路,计算也是延迟的,符号变量只能定义计算关系,而这种计算关系在执行前需要通过bind()方法产生一个执行器。

2.实现一个两层神经网络

import pickle
import numpy as np
#划分类别的边界
def cos_curve(x):
	return 0.25*np.sin(2*x*np.pi+0.5*np.pi)+0.5
#samples 保存二维点的左边,labels标明类别
np.random.seed(123)
samples=[]
labels=[]
#单位空间内平均样本数位50
sample_density=50
for i in range(sample_density):
		x1,x2=np.random.random(2)
		#计算当前x1对应的边界
		bound=cos_curve(x1)
		#为了方便可视化,舍弃太靠近边界的样本
		if bound -0.1<x2<=bound+0.1
			continue
		else:
			samples.append((x1,x2))
			#上半部分标签为1,下半部分标签为2
			if x2>bound:
				labels.append(1)
			else:
				labels.append(0)
# 再将生成的样本和标签保存好
with open('data.pk1','wb') as f:
	pickle.dump((sanmples,labels),f)

在这里插入图片描述

3.用Caffe 实现一个神经网络

3.1安装Caffe
需要下载一些安装包,比如 libprotobuf-dev libleveldb-dev libsnappy-dev等等依赖包
先安装到Caffe的文件夹

git clone https://github.com/BVLC/caffe.git

然后到caffe 文件夹下,找到Makefile.config.example 文件复制一份

cd caffe
cp Makefile.config.example Makefile.config

并且配置的一些编译选项就是
USE_CUDNN:=1;
BLAS:=mkl.
并且在默认情况下,cpu_only:=1,是被注释掉的,所以不用管,除非在没有NVIDIA的GPU下安装caffe

3.2Caffe的基本概念
他从本质上说是和MXNet中Symbolic的使用方式差不多,就是都是先定义好一个计算关系,再根据这个计算关系结合数据训练和使用模型,在Caffe中,最基本的计算结点是层,所有计算关系都是基于层的。
Caffe中预定义的层覆盖了基本上所有类型,包括全连接层,卷积层和池化层。各种各样的激活函数层,以及一些数据交互的各种层等等。

4.用Caffe实现一个两层神经网络

在Caffe中,非图像数据的支持并不是很好。

import pickle
import numpy as np
import h5py
#读取先前保存好的数据
with open('data.pkl','rb') as f:
	samples,labels=pickle.load(f)
	sample_size=len(labels)
#按照HDF5格式要求制作数据
samples=np.array(samples).reshape((sample_size,2))
labels=np.array(labels).reshape((sample_size,1))
# 生成HDF5格式数据
h5_filename='data.h5'
with h5py.Fole(h5_filename,'w') as h:
h.create_dataset('data',data=samples)
h.create_dataset('label',data=labels)
#生成HDF5数据列表
with open('data_h5.txt','w') as f:
f.write(h5_filename)	

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值