深度学习实例--服装识别(Tensorflow Version)

1. 说明

之前手搓了一个全连接(FC)神经网络, 现在用 TensorFlow 低阶API 重新实现一遍, 在理解了神经网络的工作原理之后,框架对于学习无疑是最好的选择,熟练使用框架能压缩构架模型的时间以及排除了大量难以发现(或者说,你发现了,但是解决不了)的 Bug 。 由于之前手搓的文章,已经解决一些预处理等问题, 所以现在就不会再次提出, 但是为了保证代码版本(我不确定有没有修改过),一切辅助函数都会在最后再次贴出。

2. 思路

使用 TensorFlow 建立模型的过程, 跟手搓其实差不多。依然是:

  1. 初始化
  2. 前向传播

由于前向传播的过程决定了反向传播的过程,所以 TensorFlow 依据前向传播来推导出了反向传播, 这不仅大大减少了工作量,也在某种角度上来说,使得大多数人都能够使用和学习机器学习。

按得上面的思路, 就开始实现了, 这里说一下数据的 Shape,X_train.shape == [784, 60000], Y_train.shape == [10, 60000], X_test.shape == [784, 10000], Y_test.shape == [10, 10000]

3. 初始化

3.1 Placeholder ——TensorFlow 张量

观察下面代码:

def create_placeholder(nx, ny):
    
    X = tf.placeholder(dtype = tf.float64, shape = [784, None], name = 'X')
    Y = tf.placeholder(dtype = tf.float64, shape = [ 10, None], name = 'Y')
    
    return X, Y

上面的函数输入两个参数, 返回两个在 TensorFlow 中叫做 Placeholder (占位符)的张量(Tensor)。 首先要知道在 TensorFlow 比较重要的概念有 Op 以及 Tensor, 其中 Op 表示操作(各种运算), Tensor 就是我们平时理解的用来运算数据(变量或者常量)。 自然 Placeholder 应该归为 Tensor 一类,可以看下面在IPython中的实验(其结果是我们所得理解和接受的):
在这里插入图片描述
另外,建议使用在IPython环境下实验,例如:输入tf.placeholder?即可以显示关于 placeholder 的用法, 不必死记硬背,自然函数说明是英文。

可以发现上面的 Shape = [784, None] ,784 表示输入的特征个数(图片为 28*28),这个自然是固定的; None表示不确定的值, 这里自然是我们的数据的个数。 以这样的方式创建的占位符会自动检查传入的数据的格式为 [784, m] (m>=1,且m为整数)。 因为输入数据的 Shape 的不确定性, 所以 TensorFlow 提供了 Placeholder 来表示输入。

3.2 参数初始化

参数初始化的基本跟手搓的一样:

def initialize_parameters(layers_dims):
    
    parameters = {}
    
    L = len(layers_dims)
    for l in range(1, L):
        parameters['W' + str(l)] = tf.get_variable(name = 'W' + str(l), shape = [layers_dims[l], layers_dims[l-1]], dtype = tf.float64,
                                                   initializer = tf.contrib.layers.xavier_initializer())
        parameters['b' + str(l)] = tf.get_variable(name = 'b' + str(l), shape = [layers_dims[l], 1], dtype = tf.float64,
                                                   initialize
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值