机器学习机器学习每天学点机器学习

TensorFlow深度学习笔记 实现与优化深度神经网络

2016-05-25  本文已影响4080人  梦里茶

转载请注明作者:梦里风林
Github工程地址:https://github.com/ahangchen/GDLnotes
欢迎star,有问题可以到Issue区讨论
Google深度学习 官方教程地址
视频/字幕下载

全连接神经网络

辅助阅读:TensorFlow中文社区教程 - 英文官方教程

代码见:full_connect.py

Linear Model

def reformat(dataset, labels):
    dataset = dataset.reshape((-1, image_size * image_size)).astype(np.float32)
    # Map 0 to [1.0, 0.0, 0.0 ...], 1 to [0.0, 1.0, 0.0 ...]
    labels = (np.arange(num_labels) == labels[:, None]).astype(np.float32)
    return dataset, labels

TensorFlow Graph

TensorFLow Session

Session用来执行Graph里规定的计算,就好像给一个个门电路通上电,我们在Session里,给计算单元冲上数据,That’s Flow.

SGD

神经网络

深度神经网络实践

代码见nn_overfit.py

优化

Regularization

在前面实现的RELU连接的两层神经网络中,加Regularization进行约束,采用加l2 norm的方法,进行调节:

代码实现上,只需要对tf_sgd_relu_nn中train_loss做修改即可:

l2_loss = tf.nn.l2_loss(weights1) + tf.nn.l2_loss(weights2)

OverFit问题

在训练数据很少的时候,会出现训练结果准确率高,但测试结果准确率低的情况

offset_range = 1000
offset = (step * batch_size) % offset_range

DropOut

采取Dropout方式强迫神经网络学习更多知识

参考aymericdamien/TensorFlow-Examples中dropout的使用

keep_prob = tf.placeholder(tf.float32)
if drop_out:
    hidden_drop = tf.nn.dropout(hidden, keep_prob)
    h_fc = hidden_drop
if drop_out:
    hidden_drop = tf.nn.dropout(hidden, 0.5)
    h_fc = hidden_drop

Learning Rate Decay

随着训练次数增加,自动调整步长

Deep Network

增加神经网络层数,增加训练次数到20000

# middle layer
for i in range(layer_cnt - 2):
     y1 = tf.matmul(hidden_drop, weights[i]) + biases[i]
     hidden_drop = tf.nn.relu(y1)
     if drop_out:
         keep_prob += 0.5 * i / (layer_cnt + 1)
         hidden_drop = tf.nn.dropout(hidden_drop, keep_prob)
for i in range(layer_cnt - 2):
     if hidden_cur_cnt > 2:
         hidden_next_cnt = int(hidden_cur_cnt / 2)
     else:
         hidden_next_cnt = 2
     hidden_stddev = np.sqrt(2.0 / hidden_cur_cnt)
     weights.append(tf.Variable(tf.truncated_normal([hidden_cur_cnt, hidden_next_cnt], stddev=hidden_stddev)))
     biases.append(tf.Variable(tf.zeros([hidden_next_cnt])))
     hidden_cur_cnt = hidden_next_cnt
stddev = np.sqrt(2.0 / n)
keep_prob += 0.5 * i / (layer_cnt + 1)

觉得我的文章对您有帮助的话,给个star可好?

上一篇 下一篇

猜你喜欢

热点阅读