TensorFlow学习笔记(三)

昨天是学习的第三天。晚上竟然忘记了总结emmm。一大早起来发一下,昨天学的东西很少,然后接下来要学习卷积神经网络了,也不想太着急,先把学到的这些应用一下,昨天把mnist的手写识别自己写了一下,准确率在95以上,又写了一个模拟高次函数的。几天继续加油用tensorflow写一些别的数据集,加入数据预处理

下面是昨天的笔记(很少,时间都用来实战了)

1.在一个神经网络中需要设置的参数有:

学习率:learning rate

学习衰减率:用指数衰减法生成lr时需要用到

隐藏层的节点数:这个是w1的shape的y, x是输入数据的shapq.y

迭代轮数:程序运行的次数,也就是优化器工作的次数

input_node:输入节点的大小一般为 shape(None,input_node),None表示多少个样本未知,input_node表示输入样本维度大小

output_node:输出节点的大小一般为 shape(None,output_node)None表示多少个样本未知,和输入的个数应该一样,output_node表示输出样本维度大小

 

2.变量管理

通过一个inference函数将神经网络中所有的参数都容纳了进去,最后返回的前向传播的结果,但是

如果变量变得更多了就不方便了。

为了实现方便 可以通过tf.get_variable 和tf.variable_scope实现

 

3.模型的持久化

保存模型用到tf.train.Saver

 

saver = tf.train.Saver()

wiht tf.Session() as sess:

sess.run(train)

 

#将模型保存到某一文件路径下

saver.save(sess,"路径.ckpt")

模型的后缀名是ckpt

会生成三个文件model.ckpt.meta 保存了计算图的结构

model.ckpt 保存了程序中每一个变量的取值

checkpoint文件,保存了一个目录下所有模型的文件列表

 

加载一个模型 saver.restore()

 

4.神经网络的重构

如果代码太冗长,一部分出错会严重影响下面程序的运行。所以将整个神经网络模块化,分成多个部分。

可以分成3部分,infernece.py用来计算前向传播的数值

train.py 用来作为训练过程

eval.py用来做测试过程

 

附上昨天手写数字识别的代码,算是大体了解了一下具体步骤(没有加入滑动平均,这个还是不熟悉,以后抽空看看)


# coding: utf-8

# In[1]:


import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data


# In[13]:



#大致流程

#定义各个层之间的维度
INPUT_NODE = 784
LAYER_NODE = 100
OUTPUT_NODE = 10

#学习率
# LR = 0.03


#正则项的系数
LAMBDA = 0.0001

#训练次数

#定义每次迭代输入的样本个数
batch_size = 100


#传入神经网络的权重以及偏置项
def inference(x,w1,b1,w2,b2):
#     a = tf.matmul(x,w1)+b1
    a = tf.nn.relu(tf.matmul(x,w1)+b1)
#     y = tf.matmul(a,w2)+b2
    #通过使用relu函数作为输出函数可以实现非线性
    y = tf.nn.relu(tf.matmul(a,w2)+b2)
    return y

#将数据集传入
def train(mnist):
    
    #定义两个变量来存储数据集的输入以及输出
    x = tf.placeholder(tf.float32,[None,INPUT_NODE],name="x_input")
    y_ = tf.placeholder(tf.float32,[None,OUTPUT_NODE],name="y_input")
    
    #开始生成隐藏层的参数
    
    #通过truncated_normal生成一个正态分布的张量
    w1 = tf.Variable(tf.truncated_normal([INPUT_NODE,LAYER_NODE],stddev=0.1))
    b1 = tf.Variable(tf.constant(0.1,shape=[LAYER_NODE]))
    
    w2 = tf.Variable(tf.truncated_normal([LAYER_NODE,OUTPUT_NODE],stddev=0.1))
    b2 = tf.Variable(tf.constant(0.1,shape=[OUTPUT_NODE]))
    
    
    y = inference(x,w1,b1,w2,b2)
    #计算Loss函数
    
    cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=tf.argmax(y_,1),logits=y)
    
    cross_entropy_mean = tf.reduce_mean(cross_entropy)
    
    #定义正则项
    
    regularizer = tf.contrib.layers.l2_regularizer(LAMBDA)
    regularizion = regularizer(w1)+regularizer(w2)
    
    #通过指数衰减生成学习率
    global_step = tf.Variable(0)
    LR = tf.train.exponential_decay(0.1,global_step,100,0.96,staircase=True)
    
    #定义Loss函数在这里loss为交叉熵的损失加上正则的损失
    
    loss = cross_entropy_mean + regularizion
    
    #开始训练
    
    train_step = tf.train.GradientDescentOptimizer(LR).minimize(loss,global_step=global_step)
    
    correct_pr = tf.equal(tf.argmax(y,1),tf.argmax(y_,1))
    acc = tf.reduce_mean(tf.cast(correct_pr,tf.float32))
    
    
    #开始迭代
    
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        for i in range(25):
            for batch in range(mnist.train.num_examples//batch_size):
                xs,ys = mnist.train.next_batch(batch_size)
                sess.run(train_step,feed_dict={x:xs,y_:ys})
            accu = sess.run(acc,feed_dict={x:mnist.test.images,y_:mnist.test.labels})
            print("第{0}轮,准确率为{1}".format(i,accu))
def main(argv =None):
    mnist = input_data.read_data_sets("MNIST_data",one_hot=True)
    train(mnist)
    
if __name__=="__main__":
    tf.app.run()

 

总结:今天继续实战~~~~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值