日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

【TensorFlow-windows】keras接口学习——线性回归与简单的分类

發(fā)布時間:2023/12/13 windows 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【TensorFlow-windows】keras接口学习——线性回归与简单的分类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

之前有寫過幾篇TensorFlow相關(guān)文章,但是用的比較底層的寫法,比如tf.nn和tf.layers,也寫了部分基本模型如自編碼和對抗網(wǎng)絡等,感覺寫起來不太舒服,最近看官方文檔發(fā)現(xiàn)它的教程基本都使用的keras API,這就尷尬了,學一波
國際慣例,參考博客:
官方開始案例
keras比tensorflow差在哪里?

其實網(wǎng)上有很多博客了,但是為實驗了一下跑不起來,而且按照官方文檔理解的使用算法和網(wǎng)絡上的博客又不同,比如這位大佬的博客中有這樣一行代碼:

model.add(Dense(input_dim=1, output_dim=1, init='uniform', activation='linear'))

但是我去找官方文檔tf.keras.Dense發(fā)現(xiàn)并沒input_dim,output_dim這兩個參數(shù),很多博客都有這樣寫,難道是keras而非是以keras為前端的Tensorflow的參數(shù)?感覺看著迷迷糊糊,還不如自己按照官方文檔手擼一波。
學習步驟還是之前的思路:線性回歸,全連接的手寫數(shù)字分類,卷積,RNN,RBM

【注】如果本地電腦沒有TensorFlow環(huán)境,可以試用官方提供的在線編輯調(diào)試網(wǎng)站colab,灰常方便,而且還能啟動GPU和TPU,這也太良心了吧,在colab的修改->筆記本設(shè)置->硬件加速可以啟用

線性回歸

直接用 $ y=3x+5$ 這個函數(shù)

  • 引入相關(guān)包

    import tensorflow as tf import numpy as np from tensorflow import keras
  • 建立數(shù)據(jù)集

    trX=np.linspace(-1,1,101) trY=3*trX+5
  • 創(chuàng)建模型:只具有一個單隱層,三種寫法,其實我更喜歡第三種寫法

    #寫法一 #model=tf.keras.models.Sequential([ # keras.layers.Flatten(), # keras.layers.Dense(1) ]) #寫法二 # model= keras.Sequential() # model.add(keras.layers.Flatten()) # model.add(keras.layers.Dense(units=1,use_bias=True)) #寫法三 inputs = tf.keras.Input(shape=[1,]) x= tf.keras.layers.Dense(1)(inputs) model = tf.keras.models.Model(inputs=inputs,outputs=x)

    這里注意的就是層的使用方法了,首先要用Sequential建立一個序列容器,然后再將模型逐層add進來,Flatten是展平向量,Dense是全連接。或者第三種方法tf.keras.models.Model將輸入輸出嵌入模型中。
    【注意】
    寫法一和二是無法直接打印網(wǎng)絡結(jié)構(gòu)的,因為沒指定網(wǎng)絡輸入大小,或者沒開始訓練,強行打印的方法就是,在Sequential的第一層加入input_shape=[x,x]這樣的參數(shù),比如

    model=tf.keras.models.Sequential([keras.layers.Dense(1,input_shape=[1,]) ])

這樣上述三種方法都可以用model.summary()打印網(wǎng)絡結(jié)構(gòu)了。

  • 編譯優(yōu)化算法:

    model.compile(optimizer=tf.train.RMSPropOptimizer(learning_rate=0.01),loss='mse',metrics=['mae'])

    這里需要注意的是三個參數(shù)optimizer,不建議直接寫adam,sgd之類的,最好是用tf自帶的優(yōu)化器,loss表示損失,這個不太清楚MSE在tf中怎么點出來,只好用mse的形式寫了,評估函數(shù)是mae,這個回頭看看怎么去掉引號

  • 訓練:

    model.fit(trX,trY,epochs=1000)
  • 查看權(quán)重
    以上基本是完成了參數(shù)學習過程,有時候我們希望看看參數(shù),這里可以先輸出每層的名稱看看都存了啥

    print(model.layers) ''' [<tensorflow.python.keras.layers.core.Flatten object at 0x0000027AED6A3978>, <tensorflow.python.keras.layers.core.Dense object at 0x0000027AED6A3D68>] '''

    我們需要的權(quán)重在第二個layers里面,因為從0開始編號,所以取權(quán)重的方法是

    model.layers[1].get_weights() ''' [array([[2.987659]], dtype=float32), array([5.0043736], dtype=float32)] '''

    很容易發(fā)現(xiàn)不僅把權(quán)重輸出了,偏置項也在

  • 評估模型
    我們也可以制作訓練集查看誤差

    model.evaluate(trX,trY) ''' 101/101 [==============================] - 0s 594us/step [4.496799705845147e-07, 0.000640394664046788] '''

    感覺第一個應該是損失,第二個是誤差

  • 預測數(shù)值
    輸入10,那么y=3*10+5=35

    model.predict([10]) ''' array([[34.997227]], dtype=float32) '''

基本的使用都在這里了,相對于使用更底層的TensorFlow代碼,貌似用keras更加方面了,尤其是建立模型和預測結(jié)果上

分類

  • 導入相關(guān)包

    import tensorflow as tf
  • 導入數(shù)據(jù):手寫數(shù)字

    mnist=tf.keras.datasets.mnist (x_train,y_train),(x_test,y_test)=mnist.load_data() x_train,x_test=x_train/255.0,x_test/255.0#歸一化
  • 創(chuàng)建模型

    #創(chuàng)建模型 model=tf.keras.models.Sequential([tf.keras.layers.Flatten(),tf.keras.layers.Dense(512,activation=tf.nn.relu),tf.keras.layers.Dropout(0.2),tf.keras.layers.Dense(10,activation=tf.nn.softmax) ])
  • 編譯優(yōu)化算法

    #編譯模型 model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
  • 訓練和評估

    model.fit(x_train,y_train,epochs=5) model.evaluate(x_test, y_test) ''' Epoch 1/5 60000/60000 [==============================] - 15s 250us/step - loss: 0.2026 - acc: 0.9406 Epoch 2/5 60000/60000 [==============================] - 13s 213us/step - loss: 0.0809 - acc: 0.9751 Epoch 3/5 60000/60000 [==============================] - 13s 209us/step - loss: 0.0524 - acc: 0.9832 Epoch 4/5 60000/60000 [==============================] - 12s 206us/step - loss: 0.0374 - acc: 0.9880 Epoch 5/5 60000/60000 [==============================] - 12s 202us/step - loss: 0.0280 - acc: 0.9913 10000/10000 [==============================] - 1s 70us/step [0.0750152821913769, 0.9798] '''

后記

感覺前面還是不夠簡化,因為學到這里,我們在編譯模型時,只會使用引號定義優(yōu)化方法,作為一名碼農(nóng),還是喜歡點點點地點出來
看官網(wǎng)的介紹:

compile(optimizer,loss=None,metrics=None,loss_weights=None,sample_weight_mode=None,weighted_metrics=None,target_tensors=None,distribute=None,**kwargs )

部分參數(shù)描述:

  • optimizer:優(yōu)化器的字符串名字,或者優(yōu)化器實例,具體看optimizers
  • loss:目標函數(shù)的名字或者目標函數(shù),看loss
  • metrics:訓練或測試模型所使用的評估方法,一般使用metrics=['accuracy']

當我們點擊優(yōu)化器和loss的時候,很容易發(fā)現(xiàn),這兩個東東都隸屬于tf.keras的類,嘗試點一下

除了最后一個常用accuracy,不清楚還能用什么以外,差不多已經(jīng)達到了解放雙手的效果,我們只需要嘗試點點點就能依據(jù)智能提示構(gòu)建一個非常簡單的keras模型,其實后來想了想有時候我們的目標函數(shù)和評估函數(shù)是一樣的,那么能否直接使用tf.keras.losses里面的損失函數(shù)作為評估函數(shù)呢,然后試了一下,穩(wěn)如狗,可以,但是要注意是列表形式放進去

比如上面分類例子中使用的:

model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])

可以換成

#初始化一個優(yōu)化方法實例 optim=tf.keras.optimizers.Adam(); #編譯模型 #編譯模型 model.compile(optimizer= optim,loss=tf.keras.losses.sparse_categorical_crossentropy,metrics=[tf.keras.losses.MSE])

后記

接下來就要看看如何使用自己的數(shù)據(jù)去訓練keras構(gòu)建的模型,從第一個回歸的例子來看,好像沒有之前學tensorflow一樣那么麻煩,需要使用比較復雜的數(shù)據(jù)流。

下節(jié)預告,構(gòu)建手寫數(shù)字分類系統(tǒng),使用卷積的方法,并且要能保存和調(diào)用模型

本章代碼戳這里 ,記得使用colab打開,可以直接運行,美滋滋

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的【TensorFlow-windows】keras接口学习——线性回归与简单的分类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。