深度学习笔记4--TensorFlow神经网络

本文介绍了如何使用TensorFlow构建深度神经网络,重点在于ReLU激活函数的应用和多层神经网络的实现。通过详细指导和代码示例展示了在TensorFlow中搭建和训练MNIST数据集分类模型的过程,包括学习参数、隐藏层参数、权重和偏置项的设定,以及优化器的选择。
摘要由CSDN通过智能技术生成

多层神经网络

之前你应该了解,在网络里面添加一个隐藏层,可以让它构建更复杂的模型。而且,在隐藏层用非线性激活函数可以让它对非线性函数建模。

一个常用的非线性函数叫 ReLU(rectified linear unit)。ReLU 函数对所有负的输入,返回 0;所有 x>0 的输入,返回 x


TensorFlow ReLUs

TensorFlow 提供了 ReLU 函数 tf.nn.relu(),如下所示:

# Hidden Layer with ReLU activation function
# 隐藏层用 ReLU 作为激活函数
hidden_layer = tf.add(tf.matmul(features, hidden_weights), hidden_biases)
hidden_layer = tf.nn.relu(hidden_layer)

output = tf.add(tf.matmul(hidden_layer, output_weights), output_biases)

上面的代码把tf.nn.relu() 放到隐藏层,就像开关一样把负权重关掉了。在激活函数之后,添加像输出层这样额外的层,就把模型变成了非线性函数。这个非线性的特征使得网络可以解决更复杂的问题。


TensorFlow 中的深度神经网络

你已经学过了如何用 TensorFlow 构建一个逻辑分类器。现在你会学到如何用逻辑分类器来构建一个深度神经网络。

详细指导

接下来我们看看如何用 TensorFlow 来构建一个分类器来对 MNIST 数字进行分类。

代码

TensorFlow MNIST

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets(".", one_hot=True, reshape=False)

你可以使用 TensorFlow 提供的 MNIST 数据集,他把分批和独热码都帮你处理好了。

学习参数 Learning Parameters

import tensorflow as tf

# 参数 Parameters
learning_rate = 0.001
training_epochs = 20
batch_size = 128  # 如果没有足够内存,可以降低 batch size
display_step = 1

n_input = 784  # MNIST data input (img shape: 28*28)
n_classes = 10  # MNIST total classes (0-9 digits)

这里的关注点是多层神经网络的架构,不是调参,所以这里直接给你了学习的参数。

隐藏层参数 Hidden Layer Parameters

n_hidden_layer = 256 # layer number of features 特征的层数

n_hidden_layer 决定了神经网络隐藏层的大小。也被称作层的宽度。

权重和偏置项 Weights and Biases

# Store layers weight & bias
# 层权重和偏置项的储存
weights = {
    'hidden_layer': tf.Variable(tf.random_normal([n_input, n_hidden_layer])),
    'out': tf.Variable(tf.random_normal([n_hidden_layer, n_classes]))
}
biases = {
    'hidden_layer': tf.Variable(tf.random_normal([n_hidden_layer])),
    'out': tf.Variable(tf.random_normal([n_classes]))
}

深度神经网络有多个层,每个层有自己的权重和偏置项。'hidden_layer' 的权重和偏置项只属于隐藏层(hidden_layer), 'out' 的权重和偏置项只属于输出层(output layer)。如果神经网络比这更深,那每一层都有权重和偏置项。

输入 Input

# tf Graph input
x = tf.placeholder("float", [None, 28, 28, 1])
y = tf.placeholder("float", [None, n_classes])

x_flat = tf.reshape(x, [-1, n_input])

MNIST 数据集是由 28px * 28px 单通道图片组成。tf.reshape()函数把 28px * 28px 的矩阵转换成了 784px * 1px 的单行向量 x

多层感知器 Multilayer Perceptron

# Hidden layer with RELU activation
# ReLU作为隐藏层激活函数
layer_1 = tf.add(tf.matmul(x_flat, weights['hidden_layer']),\
    biases['hidden_layer'])
layer_1 = tf.nn.relu(layer_1)
# Output layer with linear activation
# 输出层的线性激活函数
logits = tf.add(tf.matmul(layer_1, weights['out']), biases['out'])

你之前已经见过 tf.add(tf.matmul(x_flat, weights['hidden_layer']), biases['hidden_layer']),也就是 xw + b。把线性函数与 ReLU 组合在一起,形成一个2层网络。

优化器 Optimizer

# Define loss and optimizer
# 定义误差值和优化器
cost = tf.reduce_mean(\
    tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=y))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)\
    .minimize(cost)

这跟 Intro to TensorFlow lab 里用到的优化技术一样。

Session

# Initializing the variables
# 初始化变量
init = tf.global_variables_initializer()

# Launch the graph
# 启动图
with tf.Session() as sess:
    sess.run(init)
    # Training cycle
    # 训练循环
    for epoch in range(training_epochs):
        total_batch = int(mnist.train.num_examples/batch_size)
        # Loop over all batches
        # 遍历所有 batch
        for i in range(total_batch):
            batch_x, batch_y = mnist.train.next_batch(batch_size)
            # Run optimization op (backprop) and cost op (to get loss value)
            # 运行优化器进行反向传导、计算 cost(获取 loss 值)
            sess.run(optimizer, feed_dict={x: batch_x, y: batch_y})

TensorFlow 中的 MNIST 库提供了分批接收数据的能力。调用mnist.train.next_batch()函数返回训练数据的一个子集。

深度神经网络

就是这样!从一层到两层很简单。向网络中添加更多层,可以让你解决更复杂的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值