zoukankan      html  css  js  c++  java
  • keras学习(一)

      最近在学习keras,主要还是跟着网上大佬们的教程走的,代码也是跟着写的,没啥自己创新,算是记录一下吧!第一次学习就是进行一个简单的拟合,拟合一个一元一次方程吧(数学语言来说):y = 0.5x + 2。先放上代码吧!

    import keras
    import numpy as np 
    import matplotlib.pyplot as plt
    from keras.models import Sequential #模型这个用的多
    from keras.layers import Dense #用到什么层,就像这个形式导入
    
    x = np.linspace(-1, 1, 200)
    np.random.shuffle(x)  #打乱数组,指令操作,不是赋值操作,如果在前面加'x='会出错
    
    ai = np.random.normal(0, 0.05, (200,)) #这种是生成一些正态分布的数据,均值是0,标准差是0.05
    bi = np.linspace(-0.05, 0.05, 200) #这个就是单纯的随机生成,
    
    y = x*0.5 + 2 + ai #根据函数关系式生成y
    plt.scatter(x, y)  #scatter显示散点图,显示x与y的关系散点图
    plt.show()
    
    #划分训练集和验证集
    x_train, y_train = x[:160], y[:160] #前160训练
    x_test, y_test = x[160:], y[160:] #后160测试
    
    #建立模型
    model = Sequential()  #建立模型第一步就是这一个语句,建立一个顺序模型
    model.add(Dense(units=1, input_dim=1)) #然后慢慢一步一步的往模型里面加层,这里直接全连接层,输入尺寸为1,输 
                                           #出也是1,一个x对应一个y
    
    model.compile(loss='mse',optimizer='sgd')  #上面是模型的结构搭建好了,接下来是编译模型,使得他能够使用
    
    #开始训练
    print("#train--------------------------")
    for step in range(601): #训练601步,如果结果不是很接近0.5和2,可以自己设置多训练一会
        cost = model.train_on_batch(x_train, y_train) #这个按照官方文档说的就是每次去batch个数据进行训练,这里 
                                                      #应该是每次选一个吧,然后返回一个测试误差的值(或者一些 
                                                      #误差值的列表,这里没有多个评价指标,所以就一个了)
        if step%100==0:
            print("cost%f" % cost) #每一百步输出一下cost,可以自己设置,输出500个都没问题
    
    print("#test---------------------------")
    cost = model.evaluate(x_test, y_test, batch_size=40) #这个就是直接取40个测试数据进行预测,我的理解就是通过                                                                              
                                                   #模型将输入的x_test计算出y值,再跟y_test比较,得出误差值
    print("test cost:%f" % cost)
    w,b = model.get_weights()  #这个我也不知道该咋说,就是获得权重和偏置
    print("w:%f,b:%f" % (w, b))
    
    y_pred = model.predict(x_test) #显而易见就是根据x_test获得预测值
    plt.scatter(x_test, y_test) #最后将x_test,y_test的散点图显示和预测出y_pred绘制的直线进行对比
    # plt.show()
    plt.plot(x_test, y_pred)
    plt.show()
    

      代码就是上面的了,我也是萌新,大佬看了不要喷,有写错的地方希望指正。整体思路就是先得到训练数据和测试数据,应该也可以导入,但是通过numpy获得比较快捷。然后就是搭建模型,编译模型,再开始训练,测试,最后看一些结果。为什么要在y=0.5*x+2后面再加个ai呢(看代码),如果不加,那所有的数据点都在一条直线上了,就没有训练的目的了,直接根据两个点就算出来了。然后处理ai是获得正态分布的数值,不用bi(代码),因为bi差不多是均匀分布的,虽然是随机生成的,所以整个数据可以类似看成是一个矩形了,下图红色框(我已经尽量把线画直了:):

      然后训练可能就会在这个矩形里面进行,而采用正态分布就会比这个效果好。最后得到的结果w=0.507225,b=1.999865,图形如下:

  • 相关阅读:
    abap程序之间调用
    java-response-乱码解决
    java-servlet:response/request
    同平台不允许同时登陆的方案(不同平台可同时登陆)
    @Async 异步http请求,汇总数据处理
    ABAP-VOFM FOR MM-PO PRICE
    ABAP-CDS
    PI-Custom adapter module
    Vue中在移动端如何判断设备是安卓还是ios
    v-show在select中选择bug
  • 原文地址:https://www.cnblogs.com/hecong/p/13397877.html
Copyright © 2011-2022 走看看