在b站上看视频学习tensorflow基本知识,同时记录一下~
由于课程第一节讲的是环境搭建,那部分自己完成了,没有听课,所以就从(二)开始吧
- 视频内容:05-1;05-2;05-3
- 主要内容:使用Tensorboard进行结构可视化
- 代码链接参考:github,由于所有的代码都是在Jupyter Notebook中进行编写以及运行,所有代码编写过程中有很多次运行,查看输出结果。
- 代码格式是.ipynb格式,查看代码方法:已经安装好了Anaconda等环境,打开终端,输入
Jupyter Notebook
,就可以按照路径打开代码了。
5-1 优化mnist手写识别
优化策略:
- 批次大小设置为128;
- 学习率设置为变量,epoch(50)每迭代一次改一次学习率,赋给学习率,学习率越来越小;
- 网络两个隐藏层2000和500个神经元;
- 定义了dropout,设置为0.8;
- 使用交叉熵代价函数;
结果:发现迭代速度很快。
完整代码如下:
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
# 载入数据
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
# 批次的大小
batch_size = 128
n_batch = mnist.train.num_examples // batch_size
x = tf.placeholder(tf.float32, [None,784])
y = tf.placeholder(tf.float32, [None, 10])
keep_prob = tf.placeholder(tf.float32)
lr = tf.Variable(1,dtype = tf.float32)
# 创建神经网络
W1 = tf.Variable(tf.truncated_normal([784,2000],stddev=0.1))
b1 = tf.Variable(tf.zeros([1, 2000]))
# 激活层
layer1 = tf.nn.relu(tf.matmul(x,W1) + b1)
# drop层
layer1 = tf.nn.dropout(layer1,keep_prob=keep_prob)
# 第二层
W2 = tf.Variable(tf.truncated_normal([2000,500],stddev=0.1))
b2 = tf.Variable(tf.zeros([1, 500]))
layer2 = tf.nn.relu(tf.matmul(layer1,W2) + b2)
layer2 = tf.nn.dropout(layer2,keep_prob=keep_prob)
# 第三层
W3 = tf.Variable(tf.truncated_normal([500,10],stddev=0.1))
b3 = tf.Variable(tf.zeros([1,10]))
# prediction = tf.nn.softmax(tf.matmul(layer2,W3) + b3)
prediction = tf.matmul(layer2,W3) + b3
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=prediction))
# 梯度下降法
# train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)
train_step = tf.train.AdadeltaOptimizer(lr).minimize(loss)
# train_step = tf.train.AdamOptimizer().minimize(loss)
# train_step = tf.train.RMSPropOptimizer(learning_rate=0.001).minimize(loss)
# train_step = tf.train.AdagradOptimizer(learning_rate=1).minimize(loss)
# 初始化变量
init