• tensorflow学习2-线性拟合和神经网路拟合


    线性拟合的思路:

    线性拟合代码:

     1 import tensorflow as tf
     2 import numpy as np
     3 import matplotlib.pyplot  as plt
     4 #%%图形绘制
     5 def data_show(x,y,w,b):
     6     plt.figure()
     7     plt.scatter(x,y,marker='.')
     8     plt.scatter(x,(w*x+b),marker='.')
     9     plt.show()
    10 #%%生成数据
    11 x_data=np.random.rand(100).astype(np.float32)
    12 y_data=0.1*x_data + 0.3
    13 #%%创建结构
    14 Weights=tf.Variable(tf.random_uniform([1],-1.0,1.0))#平均分布的随机数
    15 biases=tf.Variable(tf.zeros([1]))
    16 y=Weights*x_data+biases
    17 loss=tf.reduce_mean(tf.square(y-y_data)) #损失函数,reduce_mean:计算一个张量的各维度的元素的均值
    18 optimizer=tf.train.GradientDescentOptimizer(0.5)#优化器 学习率选择#.GradientDescentOptimizer()实现梯度下降算法的优化器。
    19 train=optimizer.minimize(loss)#优化器优化目标选择,使loss 最小
    20 init=tf.global_variables_initializer() #初始化全变量节点
    21 #%%
    22 ###训练部分
    23 with tf.Session() as sess:
    24     sess.run(init)
    25     for i in range(200):
    26         sess.run(train)
    27         if i %20==0:
    28             print(i,sess.run(Weights),sess.run(biases))
    29             data_show(x_data,y_data,sess.run(Weights),sess.run(biases))
    30 #%%     
    31             writer=tf.summary.FileWriter("/path/to/logs",tf.get_default_graph())
    32             writer.close()


     


     神经网络拟合二次函数(带噪声)

     代码:

    import tensorflow as tf
    import numpy as np
    #%% 
    def add_layer(input,in_size,out_size,activation_function=None):
        Weights=tf.Variable(tf.random_normal([in_size,out_size]))
        #tf.random.uniform()均匀分布,tf.random.normal() 正太分布
        biases=tf.Variable(tf.zeros([1,out_size])+0.1)#biases 的维度是1行,Weights的列
        #输入是1*input,Weights是input*output,output是1*output,所以biases是1*output
        wx_plus_b=tf.matmul(input,Weights)+biases
        if activation_function==None:
            output=wx_plus_b
        else:#加入激活函数
            output= activation_function(wx_plus_b)
        return output#返回output 
    #%%
    x_data= np.linspace(-1,1,300)[:,np.newaxis]  #np.linspace(),-1到1进行300等分的数组得到1*300,再进行变换为300*1
    noise=np.random.normal(0,0.05,x_data.shape)
    y_data=np.square(x_data)-0.5+noise
    #%%
    #占位符,feed_dict={}进行赋值
    xs=tf.placeholder(tf.float32,[None,1])
    ys=tf.placeholder(tf.float32,[None,1])
    ll=add_layer(xs,1,10,activation_function=tf.nn.relu)#激活函数是relu
    prediction=add_layer(ll,10,1,activation_function=None)
    reduce_sum=tf.reduce_sum(tf.square(ys-prediction),reduction_indices=1)
    loss=tf.reduce_mean(reduce_sum)
    #tf.reduce_sum:计算一个张量的各个维度的元素之和。
    #tf.reduce_mean():取平均值。
    train_step=tf.train.GradientDescentOptimizer(0.1).minimize(loss)
    init=tf.global_variables_initializer()
    with tf.Session() as sess:
        sess.run(init)
        for i in range(1000):
            sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
            #if i % 50 ==0:
            #    print(sess.run(loss,feed_dict={xs:x_data,ys:y_data}))
            if i==999:
                print(sess.run(tf.square(ys - prediction),feed_dict={xs:x_data,ys:y_data}))
            #输出的是300行1列 [300,1]
            #[[  4.99251783e-02]
            #[  1.65489316e-02]
            #        ..........
            #[  3.05732153e-02]]
    #经过,tf.reduce_sum(,reduction_indices=1)后为了:
            if i==999:
                 print(sess.run(tf.reduce_sum(tf.square(ys-prediction),reduction_indices=1), feed_dict={xs: x_data, ys: y_data}))
            #输出的是1行300列[300]------>[1,2,3,.....]就叫做[300],共计300个元素
            #[  3.73238046e-03  ..... 1.45917088e-02]


        补充知识 :

    1.tf.random.uniform() 符合均匀分布--------tf.random.normal()  符合正太分布

    2.np.newaxis补充知识  :

    import numpy as np
    a=np.array([1,2,3,4,5])#creat a array
    b=a[:,np.newaxis]
    #a---->[1,2,3,4,5]
    #b---->[[1],[2],[3],[4],[5]] 5行1列 (5,1)
    c=a[np.newaxis,:]
    #c---->[[1,2,3,4,5]]  1行5列 (1,5)

    3.特别注意:reduction_indices=[1]可知是指定操作坐标轴的函数,即把[300,1]按行求和后拼接为新的数组,也就是[300]的尺寸

      

     

  • 相关阅读:
    PHP
    思科模拟器
    路由器
    服务器
    Windows Server 2008 笔记【瞎写】
    Day1 T3 数列
    java中自定义excel模板并且填充内容
    springMVC接收值list时,超过256出现IndexOutOfBoundsException
    java将日期转换成周几
    两个tomcat配置各自的SSL证书(前后端分离)
  • 原文地址:https://www.cnblogs.com/ChenKe-cheng/p/8810738.html
Copyright © 2020-2023  润新知