本想开始CNN的实现,发现还有一些需要提前分享给大家:
1.可视化结果:
matplotlib可用来可视化tensorflow曲线拟合过程:
①真实的x,y散点图:
import matplotlib.pyplot as plt
fig =plt.figure()
ax = fig.add_subplot(1,1,1)
ax.scatter(x_data, y_data)
plt.ion() #show()之后不会终止程序运行
plt.show()
②画出每次更新的拟合曲线:
try:
ax.lines.remove(lines[0])
except Exception:
pass
③拟合曲线:
lines= ax.plot(x_data, predict_value, 'r-', lw=5)
plt.pause(0.1)
2.加速NN训练过程
优化器的选择,会影响到NN的训练速度,tensorflow中有7中优化器:
①GradientDescentOptimizer类,包括SGD;建议初学者使用;
②AdadeltaOptimizer;
③AdagradOPtimizer;
④MomentumOptimizer;最常用的优化器之一,建议熟手使用;
⑤AdamOptimizer;最常用的优化器之一,建议熟手使用;
⑥FtrlOptimizer;
⑦RMSPropOptimizier;
3.可视化神经网络结构:
命名网络结构->存储网络结构->生成网址->查看网络网络结构;
①命名网络结构;
with tf.name_scope('inputs')
with tf.name_scope('layer')
with tf.name_scope('Weights')
with tf.name_scope('biases')
with tf.name_scope('outputs')
with tf.name_scope('loss')
with tf.name_scope('train')
②存储网络结构;
tf.Session()之后,
writer = tf.train.SummaryWriter('logs/', sess.graph)
③生成网址:
terminal中输入命令:ensorboard --logdir='logs/'
④③中网址贴入浏览器;
4.可视化Weights/biases/loss的变化:
①创建展示区:
method 1:
tf.histogram_summary(layer_name+'/Weights', Weights)
method2:
tf.scalar_summary('loss', loss)
②存储展示内容:
for i in range(100):
merged = tf.merge_all_summaries()
result = sess.run(merged ,feed_dict={xs:x_data, ys:y_data})
writer.add_summary(result, i)
③生成网址->查看结果;
5.Classification:
①activation_function一般是softmax;
②loss一般是cross_entropy;
6.过拟合:
①解决方法有三:①增加数据量,让拟合曲线无法扭曲的厉害;②L1/L2 Regualrization;③Dropout Regularation;最后一种方式是专给神经网络用的;
②L1/L2 Regularization:在原有cost function 中加入惩罚项:
L1惩罚项:abs(W)
L2惩罚项:(W)^2
③Dropout Regularation:
第一轮训练随机drop掉一些神经元与连接->第二轮继续随机drop掉一些神经元与连接->...->end
tensorflow中用keep_prob来表示随机drop后剩下的占比:
keep_prob = tf.placeholder(tf.float32)
Wx_plus_b = tf.nn.dropout(Wx_plus_b, keep_prob=0.5)
完整代码已经上传github:
https://github.com/Tayhh/MachineLearning中的tensorflow.py
未完待续。。。。下篇开始CNN的实现