tensorflow-learning-where-what-how

时间:2022-06-04 19:43:02

这么优秀的外国小哥哥... https://github.com/machinelearningmindset/TensorFlow-Course

tensorboard使用:https://github.com/secsilm/understanding-tensorboard

tensorflow-morvan

  • placeholder:session外定义,session里面传入具体变量
  • 在session外定义完整的结构,包括具体的操作、loss、减小loss的优化器optimizer,还有train(optimizer),然后再session里头run(train),变量要先初始化。
  • matplotlib可视化
  • 加速方法:
    • SGD:把这些数据拆分成小批小批的, 然后再分批不断放入 NN 中计算,走好多曲曲折折的路
    • momentum:放到斜坡上,一下子滑好远 m = b1 * m - Learning rate * dx; W += m
    • AdaGrad: 加大阻力,让他拐弯的时候偏离路线不能太远 v += dx^2; W += -Learning rate * dx/ √v
    • RMSProp:不完全结合上面两种方法
    • Adam: 结合上面两种方法
  • tensorboard:想在图里表示哪个变量就with tf.name_scope("name_val")这个东西的上边,最后在session里写tf.summary,FileWriter("logs/",sess.graph)
  • 交叉熵用来衡量预测值和真实值的相似程度,如果完全相同,它们的交叉熵等于零。
  • 正则化:防止过拟合,让W变大的同时cost = 预测值-真实值得平方也变大,相当于一种惩罚机制。防止过拟合还可以用dropout,每次训练在这一层随机忽略掉一些神经元和神经联结。
  • saver&loader:先定义with save,之后再使用
  • cnn: tf.nn.conv2d函数是tensoflow里面的二维的卷积函数,x是图片的所有参数,W是此卷积层的权重,然后定义步长strides=[1,1,1,1]值,strides[0]和strides[3]的两个1是默认值,中间两个1代表padding时在x方向运动一步,y方向运动一步,padding采用的方式是SAME。
  • call():在python中,函数和类都可以变成可调用对象,讲解例子。函数的调用是def 之后在外部function(input),类的调用是先定义class类 class a(),之后在外部声明初始化这个类function = a(),最后在声明之后便都可以调用类内的__call__部分print(function(input))。由此可以看出,只看最后一行的话,类和函数的外部调用是一样的。

tensorboard

with tf.name_scope('layer_name'):
with tf.variable_name('w'):
w = tf.takeplace_balabala
  • 想得到直方图啥的,就比方说loss和accuracy,就在model.py文件里定义loss和accuracy变量那先给变量起个名,然后在下边加句add_summary啥玩意就行了
self.accuracy = tf.reduce_mean(tf.cast(self.correct_pred, tf.float32),name = 'accuracy')
tf.summary.scalar('accuracy',self.accuracy) # 这里可以summary.histgram总之想要什么图,就加什么图