参数—调优经验
一、初始化weight,bias
1.1 理论
1)为了避免0梯度,weight最好初始化带些噪声,且避免数据对称
2)为了避免dead neurons(神经元“死掉”),最好初始化为一个较小的正数(因为通常会用ReLU激活函数,神经元出现负值,便永远为0,无法激活)
1.2 实战
1)初始化weights有奇效,某次初始化为tf.truncated_normal([784,hidden1_units],stddev=1.0 / math.sqrt(784))
,将60%的准确率提到90%
二、dropout
1)声明一个keep_prob 参数,keep_prob = tf.placeholder(tf.float32)
,训练时开启,测试时关闭
2)train阶段在softmax输出之前,对结果进行drop out
3)feed_dict时传入
keep_prob = tf.placeholder(tf.float32) #drop out的参数
logits = tf.nn.dropout(tf.matmul(hidden2, w3) + b3,keep_prob=keep_prob) #softmax前的结果进行dropout
sess.run([train_op,accuracy_op,loss_op,summary],feed_dict={xs:x_train,ys:y_train,keep_prob:0.5}) #训练时开启
sess.run([train_op,accuracy_op,loss_op,summary],feed_dict={xs:x_test,ys:y_test,keep_prob:1.0}) #测试时关闭
三、optimizer的选择
1)简单的网络,使用gradient descend即可
2)复杂的网络(cnn等),使用ADAM或momentum等计算更快的,效果更好的优化器
3)理解这几个常用optimizer的意义,公式推导
--# todo,实战分析
四、tensorboard的使用
https://www.tensorflow.org/get_started/summaries_and_tensorboard
https://www.jianshu.com/p/7d698cebf5f1
4.1 sumary等用法
train_writer = tf.summary.FileWriter(FLAGS.summaries_dir + '/train', sess.graph)
test_writer = tf.summary.FileWriter(FLAGS.summaries_dir + '/test')
注意:`FileWriter`第一个参数指明event文件存储路径,传graph是为了展示对应graph的形状
4.2 graph可视化
https://www.tensorflow.org/get_started/graph_viz
五、debug错误
5.1 (使用ipython等环境)tensorboard可视化输出时,当前路径只能存一个event文件
[[Node: inputs/x_input = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
使用time.time命名不同event文件夹就行。
https://stackoverflow.com/questions/35114376/error-when-computing-summaries-in-tensorflow
5.2 使用tfdbg进行可视化debug
http://www.cnblogs.com/hellcat/articles/7812119.html
https://www.tensorflow.org/programmers_guide/debugger
http://usyiyi.cn/documents/tensorflow_13/programmers_guide/debugger.html
六、使用GPU
config = tf.ConfigProto()
config.gpu_options.allow_growth = True #让gpu内存动态增长,否则直接把所有内存分配给该进程
config.log_device_placement = True #记录每个op tensor 分配的设备
sess=tf.Session(config=config)