机器学习(四)——Tensorflow2

本想开始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的实现

你可能感兴趣的:(机器学习,tensorflow,过拟合,可视化,Python,机器学习)