TensorFlow入门:给小狗分类

本文介绍如何使用TensorFlow构建一个狗分类的深度学习模型,基于Stanford Dogs Dataset,涵盖环境搭建、AlexNet网络定义、训练目标、数据预处理、训练过程以及训练结果的展示。
摘要由CSDN通过智能技术生成

0 关于本文

本文利用 Stanford Dogs Dataset (其数据取自ImageNet, 包含120个狗分类), 训练了一个用于狗分类的深度学习模型. 本文的目标是TF的Getting Start.

1 环境搭建(CPU版本为例)

在Linux下, 环境的部署较为简单, 下载 Python2 或者Python3.x版本的TF安装包安装即可.

$  sudo pip install tensorflow-1.3.0rc0-cp27-none-linux_x86_64.whl

在Windows下也可类似的方法安装TF, 但是目前官方仅发布有Python3.x的二进制包, 因此需要在Python3的环境下工作. 另外, Windows 下, 诸如 Numpy/OpenCV 等计算库也较难编译, 推荐一个提供二进制包的地方: Unofficial Windows Binaries for Python Extension Packages. 可能会用到的库有:

Numpy、Scipy、OpenCV、PIL ……

相关的库安装完成后, 可以在 Python 环境运行一段最简单的代码:

>>> import tensorflow as tf  # 引入tf模块
>>> hello = tf.constant('Hello, TensorFlow!')  # 声明一个类型为string的常量
>>> sess = tf.Session()   # Session 是计算的环境
>>> sess.run(hello)   # 在session中执行语句
'Hello, TensorFlow!'
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> sess.run(a + b)
42
>>>

由此可见, 在Python环境下使用TF, 实际上分为两个过程:

  1. 定义计算图: 描述计算节点和节点之间的关系.
  2. 使用Python接口, 向底层的计算图传入输入数据, 执行计算图, 并获取相应的输出.

2 网络搭建与训练

2.1 用于分类任务的网络(计算图)的定义

在本文中, 使用了经典的alexnet来进行分类任务, 网络的定义见 slim-alexnet. 该网络接受大小为(224, 224, 3)的Tensor作为输入数据, 其输出为与分类任务类别数n相同的实值输出, 即大小为(n,).
可以通过如下语句来使用这个网络定义:

from tensorflow.contrib.slim.python.slim.nets.alexnet import alexnet_v2 as alexnet

2.2 训练目标

我们企图通过如上定义的网络来执行分类任务, 实际上, 是希望获得一个置信度较高的从二维图像到分类数的映射, 该映射对于给定图像的输出值应尽可能的与该图像对应的实际值(label)相似. 我们有很多方法来描述这种相似, 例如:

  1. 均方误差(Mean Squared Error, MSE), 其基于真实值和预测值的欧氏距离进行度量.
  2. 交叉熵(Cross Entropy), 交叉熵是信息论中的概念, 真实值p和预测值q的交叉熵定义为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值