学习了基本的神经网络知识后,要使用框架了,这样才能出来更加复杂的情况,更快的开发出模型。
首先安装后,按照官网写了一个例子,但是又好多不懂,但只是第一步,
看这段代码,其实给你提供了很多学习tf的线索,TensorFlow中有很多变量,变量操作也是一个模块。
a = tf.constant(34) print(type(a)) <class 'tensorflow.python.framework.ops.Tensor'>
b = tf.zeros() # 这个函数是最容易理解的了
还有tf.train.GradientDescentOptimizer这个对象,真的囊括了之前做的很多工作,
__init__( learning_rate, # 这个属性有默认值啊 use_locking=False, name='GradientDescent' )
# 看看这个train方法,有点不知道什么意思,在自己写神经网络的时候,都是按照梯度下降的公式来的,这里什么也没见到,很可能是作者隐藏了
# 这里应该看到一个方法,update(param,gradient),使用梯度值来更新参数,这就是升级网络的核心。
def train(cost, global_step): optimizer = tf.train.GradientDescentOptimizer(learinng_rate) train_op = optimizer.minimize(cost,global_step= global_step) return accuracy
tf的一些张量运算方法
tf.log(x, # name=None) # x不仅是数字,而可以扩展至tensor,所以TensorFlow中好多都是针对tensor的计算。
x = tf.constant([[1., 1.], [2., 2.]]) tf.reduce_mean(x) # 1.5 tf.reduce_mean(x, 0) # [1.5, 1.5] tf.reduce_mean(x, 1) # [1., 2.] # mean是平均值的意思,体会这个reduce的意思,大体理解就是降维。类似的tf.reduce_sum()等
1、神经网络最基本的原理也是函数拟合,所以lose function就显得非常重要了,我们训练的目的之一就是减小损失函数,常用的损失函数参考:https://www.cnblogs.com/hypnus-ly/p/8047214.html,比如entropy_cross,比较两个概率分布的差异,同时又使得反向传播时好计算。
2、神经网络训练都是以一个batch为训练单位,即一批一批的训练,那么反向传播时怎么计算导数呢?可以体会,这个batch轴对于w没有什么影响,对于b有一些影响。只不过反向传播时,loss function取均值。