• tensorflow 基础学习二:实现一个神经网络


    tensorflow变量

    在tensorflow中,变量(tf.Variable)的作用就是用来保存和更新神经网络中的参数,在声明变量的同时需要指定其初始值。

    tensorflow中支持的随机数生成器:

    函数名称 随机数分布 主要参数
    tf.random_normal 正态分布 平均值、标准差、取值类型
    tf.truncated_normal 正态分布,但如果随机出来的值偏离平均值超过2个标准差,那么这个数将会被重新随机 平均值、标准差、取值类型
    tf.random_uniform 平均分布 最小、最大取值,取值类型
    tf.random_gamma Gamma分布 形状参数alpha、尺度参数beta、取值类型

    tensorflow也支持使用常数来初始化一个变量,常用的常量生成函数如下表

    函数名称 功能 实例
    tf.zeros 产生全0的数组 tf.zeros([2,3],int32)->[[0,0,0],[0,0,0]]
    tf.ones   产生全1的数组 tf.ones([2,3],int32)->[[1,1,1],[1,1,1]]
    tf.fill   产生一个全部为给定数字的数组 tf.fill([2,3],9)->[[9,9,9],[9,9,9]]
    tf.constant   产生一个给定值的常量 tf.constant([1,2,3])->[1,2,3]

    如下代码声明变量的几种方式:

    import tensorflow as tf
    # 生成一个2*3的矩阵,矩阵中的元素均值为0,标准差为2。
    weights=tf.Variable(tf.random_normal([2,3],stddev=2))
    # 生成一个初始值全为0,长度为3的变量
    biases=tf.Variable(tf.zeros([3]))
    # 使用其他变量的初始值来初始化新的变量
    w2=tf.Variable(weights.initialized_value())
    w3=tf.Variable(weights.initialized_value()*2.0)

    实现一个简单的网络,代码如下

    # 定义一个简单的网络
    import tensorflow as tf
    from numpy.random import RandomState
    
    # 定义训练数据batch的大小
    batch_size=8
    
    # 定义神经网络参数
    w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
    w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))
    
    x=tf.placeholder(tf.float32,shape=(None,2),name='x-input')
    y_=tf.placeholder(tf.float32,shape=(None,1),name='y-input')
    
    # 定义前向传播
    a=tf.matmul(x,w1)
    y=tf.matmul(a,w2)
    
    # 定义损失函数和反向传播算法
    cross_entropy=-tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-10,1.0)))
    train_step=tf.train.AdamOptimizer(0.001).minimize(cross_entropy)
    
    # 通过随机数生成一个模拟数据集
    rdm=RandomState(1)
    dataset_size=128
    X=rdm.rand(dataset_size,2)
    Y=[[int(x1+x2<1)] for (x1,x2) in X]
    
    with tf.Session() as sess:
        init_op=tf.global_variables_initializer()
        sess.run(init_op)
        
        print('训练前网络参数的值为:')
        print(sess.run(w1))
        print(sess.run(w2))
        
        # 设定训练的轮数
        STEPS=5000
        for i in range(STEPS):
            # 每次选取batch_size个样本进行训练
            start=(i*batch_size)%dataset_size
            end=min(start+batch_size,dataset_size)
            
            # 通过选取的样本训练神经网络并更新参数
            sess.run(train_step,feed_dict={x:X[start:end],y_:Y[start:end]})
            if i % 1000==0:
                # 每隔一段时间计算在所有数据上的交叉熵并输出
                total_cross_entropy=sess.run(cross_entropy,feed_dict={x:X,y_:Y})
                print("After {} training step(s),cross entropy on all data is {}".
                      format(i,total_cross_entropy))
        
        print('训练后网络参数的值为:')
        print(sess.run(w1))
        print(sess.run(w2))
  • 相关阅读:
    myeclipse自动生成相应对象接收返回值的快捷键
    JavaEE学习记录(一)--软件系统体系结构
    通过Java编码获取String分行字符串的内容
    长款或短款的处理(二)
    现金清查中的长款短款的简单解释(一)
    mybatis 的mapper配置文件sql语句中, 有时用到 大于, 小于等等
    <c:forEach items="${list}" var="tt" varStatus="status"> 的相关大小长度
    svn 提交 working copy is not up-to-date
    svn: Working copy 'D:workspaceweb....images' is too old (format 10, created by Subversion 1.6
    mybatis generator eclipse插件的安装
  • 原文地址:https://www.cnblogs.com/hypnus-ly/p/8045334.html
Copyright © 2020-2023  润新知