zoukankan      html  css  js  c++  java
  • TensorFlow基础(二)实现神经网络

    (1)前向传播算法

    神经网络的前向传播算法主要构成部分:

          1.神经网络的输入;

          2.神经网络的连接结构;神经网络是由神经元(节点)构成的

          3.每个神经元中的参数。

    (2)TensorFlow随机数生成函数

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

    (3)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]

    (4)完整神经网络Python代码

     1 # -*- coding: utf-8 -*-
     2 
     3 import tensorflow as tf
     4 from numpy.random import RandomState
     5 
     6 #定义训练数据batch的大小
     7 batch_size = 8
     8 """
     9 #定义神经网络的参数
    10 random_normal:随机生成函数,
    11 随机数分布正太分布,2x3矩阵,标准差为1
    12 随机数种子序号1,种子序号相同,产生的随机数相同
    13 """
    14 w1=tf.Variable(tf.random_normal((2,3),stddev=1,seed=1))
    15 w2=tf.Variable(tf.random_normal((3,1),stddev=1,seed=1))
    16 
    17 """
    18 定义placeholder作为存放输入数据的地方
    19 参数:数据类型,数据维度
    20 """
    21 x=tf.placeholder(tf.float32, shape=(None,2), name="x-input")
    22 y_=tf.placeholder(tf.float32, shape=(None,1), name="y-input")
    23 
    24 """
    25 matmul():矩阵乘法函数
    26 """
    27 a=tf.matmul(x,w1)
    28 y=tf.matmul(a,w2)
    29 
    30 """
    31 使用sigmoid函数将y转换为0-1之间的数值,转换后的y代表预测是正样本的概率,1-y代表预测是负样本的概率。
    32 """
    33 y=tf.sigmoid(y)
    34 
    35 #定义损失函数来刻画预测值与真实值的差距
    36 cross_entropy=-tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-10,1.0))+(1-y)*tf.log(tf.clip_by_value(1-y,1e-10,1.0)))
    37 #定义学习率
    38 learning_rate=0.001
    39 #定义反向传播算法优化神经网络的参数
    40 train_step=tf.train.AdamOptimizer(learning_rate).minimize(cross_entropy)
    41 
    42 #通过随机数生成一个模拟数据集
    43 rdm=RandomState(1)
    44 dataset_size = 128
    45 X=rdm.rand(dataset_size,2)
    46 print(X)
    47 #0表示负样本,1表示正样本
    48 Y=[[int(x1+x2<1)] for (x1,x2) in X]
    49 print(Y)
    50 
    51 #创建一个会话来运行Tensorflow程序
    52 with tf.Session() as sess:
    53     init_op = tf.global_variables_initializer()
    54     sess.run(init_op)
    55     print(sess.run(w1))
    56     print(sess.run(w2))
    57     
    58     STEPS=5000
    59     for i in range(STEPS):
    60         #每次选取batch_size个样本进行训练
    61         #%取余
    62         #min()函数取最小值
    63         start = (i*batch_size) % dataset_size
    64         end = min(start+batch_size,dataset_size)
    65         
    66         #通过选取的样本训练神经网络并更新参数
    67         sess.run(train_step, feed_dict={x: X[start:end],y_ :Y[start:end]})
    68         if i%1000 == 0:
    69             total_cross_entropy=sess.run(cross_entropy,feed_dict={x: X, y_: Y} )
    70             print("After %d training step(s), cross entropy on all data is %g" %(i, total_cross_entropy))
    71     print(sess.run(w1))
    72     print(sess.run(w2))
    73         
    74     
    75 
    76         
  • 相关阅读:
    编译安装libusb操作流水账
    SM总线控制器没有驱动 关机后又自动重启
    mtd-utils编译安装过程
    STM32开发/烧录/调试环境搭建 基于:Win10+STM32Cube+openocd+cmsis-dap(dap-link)
    EchoServer和EchoClient模型的改进1之多线程
    CountDownLatch分析
    linux-java环境安装以及ssh
    ServerSocket01
    使用SecureCRT工具部署项目
    javaScript笔记01
  • 原文地址:https://www.cnblogs.com/reaptomorrow-flydream/p/9102352.html
Copyright © 2011-2022 走看看