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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

从零开始学TensorFlow

發布時間:2024/9/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从零开始学TensorFlow 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

只有光頭才能變強。

文本已收錄至我的GitHub倉庫,歡迎Star:https://github.com/ZhongFuCheng3y/3y

最近在學習TensorFlow的相關知識,了解了TensorFlow一些基礎的知識,現在周末有空了,就寫寫一些筆記,記錄一下自己的成長~

總的來說,TensorFlow還是一個比較新的技術,有興趣的同學不妨跟著我的筆記,一起學學唄(反正沒壞處)~

知識背景:沒有Python基礎,沒有機器學習基礎,可以說是真正從零學TensorFlow的了。

一、安裝Tensorflow所需要的環境

1.1安裝Python環境

使用環境:Mac

Python有好多個版本,在Mac中自帶的Python版本是2.7,但相對而言比較老了。現在一般用Python3.x了,本次下載的版本是3.5.6

我安裝Python所使用方法的大致步驟:

  • 安裝Homebrew
  • 安裝pyenv
  • 在.bash_profile添加環境變量
  • 讓環境變量生效
  • 安裝3.X版本python

詳情可參考如下的鏈接(總的來說,我根據下面的教程一下子就安裝了我想要的Python版本,還是非常不錯的。):

  • Mac下安裝多版本python:

    • https://www.cnblogs.com/webgiser/p/7463974.html
  • pyenv相關的命令(常用的pyenv命令):

    • https://www.jianshu.com/p/af1f8d7b6b31

在安裝Python的時候也發現了一個小知識點:

  • Mac一般使用bash作為默認的shell,會有好幾個環境變量,其中etc/profile是系統級的,還有幾個用戶級別的環境變量,比如說:~/.bash_profile
  • 如果修改的是系統級別的環境變量,也就是etc/profile,在保存的時候只能是:wq!覆蓋,不然會出現readonly錯誤

(至于TensorFlow和numpy依賴的下載,這里我就不說了,就兩條命令就搞掂啦)

1.2PyCharm編輯器

Java有IDEA神器,同樣的,Python也有PyCharm,同樣是JetBrains出產的。

我在之前從來沒使用過PyCharm,也沒寫過一句的Python代碼。

把Pycharm安裝好了之后,我想當然就new project去用了,然后就next,next,next,當成IDEA來用。但發現了一個問題:我在之前明明裝好了TensorFlow和numpy的依賴,在PyCharm環境下卻識別不出來!在命令行窗口下,依賴是存在的!

后來才發現:如果用PyCharm去new一個project,會默認建一個解析器在當前的項目目錄下。而PyCharm會遵守“就近原則”使用當前項目路徑下的解析器。而我們添加的依賴(TensorFlow、numpy)是在我們安裝Python的路徑下的,這就導致了在命令行下找到依賴,而在PyCharm中找不到依賴。

解決也很簡單:在PyCharm指定一下我們安裝Python的路徑,切換一下就好了。

參考資料:

  • 關于pip安裝第三方庫,但pycharm中卻無法識別的問題;以及pycharm安裝第三方庫的方法解析

    • https://blog.csdn.net/weixin_41287260/article/details/83957731

二、體驗TensorFlow

好的,我們現在已經安裝好TensorFlow所需要的環境了!(看起來好簡單,但還是花了我不少時間....)

首先我們來看一下這個例子可以干些什么:我們有非常多張的圖片(數據集),這些圖片有不同的類型(比如衣服、鞋子、褲子,一共有10種類型),把這些數據集扔進我們的神經網絡里頭,生成出模型。有了模型以后,當我們再將類似的圖片扔進去,這個模型可以幫我們預測這張圖片是衣服還是鞋子還是褲子。

隨后,我跟著官網的代碼跑了一(代碼我都只是一步一步復制粘貼),最后跑起來:

# TensorFlow and tf.keras import tensorflow as tf from tensorflow import keras# Helper libraries import numpy as npprint(tf.__version__)# 加載數據、區分出測試數據和訓練數據 # 注意:如果已經下過,重復下載的話,可能會出現EOFError: Compressed file ended before the end-of-stream marker was reached錯誤fashion_mnist = keras.datasets.fashion_mnist (train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()# 分類的列表 class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat','Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']# 查看數據的值 print(train_images.shape) # 樣本的shape(可以看出有多少條樣本、維度) print(len(train_labels)) # label的個數,有多少個樣本,就應該有多少個label print(train_labels) # label的值,對應上面分類列表(從0到9)# 對測試數據和訓練數據進行預處理(實際上就是歸一化) train_images = train_images / 255.0 test_images = test_images / 255.0# 設置層 (初始處理)--- 建立神經層 model = keras.Sequential([keras.layers.Flatten(input_shape=(28, 28)),keras.layers.Dense(128, activation=tf.nn.relu),keras.layers.Dense(10, activation=tf.nn.softmax) ])# 損失函數、優化器、指標 model.compile(optimizer=tf.train.AdamOptimizer(),loss='sparse_categorical_crossentropy',metrics=['accuracy'])# 將訓練集丟進去,訓練出模型(Model) model.fit(train_images, train_labels, epochs=5)# 將測試數據丟到模型中,評估一下得分(準確率) test_loss, test_acc = model.evaluate(test_images, test_labels) print('Test accuracy:', test_acc)# 評估完準確率以后,我們可以對測試數據進行預測 predictions = model.predict(test_images)# 選第一個樣本預測后的得出最有可能結果 print(np.argmax(predictions[0]))# 對比結果 print(test_labels[0])

跑出來的結果:

(后期注釋:這是TensorFlow的版本)

1.12.0

(后期注釋:這是TensorFlow下載數據集的日志)

Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-labels-idx1-ubyte.gz 32768/29515 [=================================] - 0s 3us/step Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-images-idx3-ubyte.gz26427392/26421880 [==============================] - 12s 0us/step Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-labels-idx1-ubyte.gz 8192/5148 [===============================================] - 0s 0us/step Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-images-idx3-ubyte.gz4423680/4422102 [==============================] - 2s 0us/step

(后期注釋:樣本的shape)

(60000, 28, 28)

(后期注釋:樣本有多少條,對應的label就有多少條)

60000

(后期注釋:label的值是從0-9,表示有九種類別)

[9 0 0 ... 3 0 5]

(后期注釋:開始訓練)

Epoch 1/5 2019-02-19 14:00:46.842852: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA60000/60000 [==============================] - 4s 65us/step - loss: 0.4995 - acc: 0.8246 Epoch 2/5 60000/60000 [==============================] - 4s 62us/step - loss: 0.3734 - acc: 0.8655 Epoch 3/5 60000/60000 [==============================] - 4s 63us/step - loss: 0.3346 - acc: 0.8788 Epoch 4/5 60000/60000 [==============================] - 4s 63us/step - loss: 0.3102 - acc: 0.8861 Epoch 5/5 60000/60000 [==============================] - 4s 63us/step - loss: 0.2918 - acc: 0.891610000/10000 [==============================] - 0s 36us/step

(后期注釋:預測出來的精確度)

Test accuracy: 0.8514

(后期注釋:選第一個樣本進行預測,并對比實際的結果)

9 9

參考資料:

  • Tensorflow學習筆記之一:訓練你的第一個神經網絡——基礎分類

    • https://www.jianshu.com/p/d4fb3a391d22

2.1總結一下使用TensorFlow的步驟

  • 加載數據:使用dataset的api加載數據,并將數據集分成訓練數據和測試數據
  • 檢查數據:檢查dataSet的數據有沒有問題(例如,樣本的記錄數、label的記錄數等)
  • 對數據預處理:對測試數據和訓練數據進行歸一化處理,目的:減少因為數值的大小所帶來的影響(一般我們會將值都縮小在一個小的范圍內)
  • 建立神經網絡:(輸入層、隱藏層、輸出層)
  • 為模型定義損失函數、優化器、指標
  • 將訓練數據丟進我們的神經網絡中,生成出Model
  • 將測試數據丟進我們生成好的Model進行評估,預測出我們的準確率
  • 三、TensorFlow介紹

    3.1什么是TensorFlow

    如果去Google搜關鍵字“TensorFlow”,那可能你會看到這么一句話:

    An open source machine learning framework for everyone.

    沒錯,TensorFlow就是一個機器學習的框架。至于框架,相信大家也比較好理解了;類比到Java,比如說我們的Spring框架給我們封裝了好多好用的API,簡化我們的開發(想想當年寫Servlet的時候!)

    TensorFlow作為機器學習的框架,同樣也給我們封裝了好多好用的API,能夠降低學習機器學習的門檻

    • 就拿上面的例子來說,沒想到那么少的代碼就可以跑機器學習的“HelloWorld”了!

    3.2TensorFlow的架構

    我們可以發現上面的Demo所用的基礎語言是Python,但不要認為TensorFlow就是Python的一個框架。我看到過一個比喻,覺得寫得挺好的,粘貼一下:

    Python 和 Tensorflow 之間的聯系,可以類比 Javascript 和 HTML 之間的關系。Javascript 是一種全功能的編程語言,可以實現各種出色的效果。HTML 是用于表示某種類型的實用計算抽象(這里指的是可由 Web 瀏覽器呈現的內容)的框架。Javascript 在交互式網頁中的作用是組裝瀏覽器看到的 HTML 對象,然后在需要時通過將其更新為新的 HTML 來與其交互。

    • 作者:AI前線
    • 鏈接:https://juejin.im/post/5b345a49f265da599c561b25

    下面再來看看TensorFlow的架構圖(Python只是對TensorFlow進行了封裝)

    TensorFlow的引擎也是分了很多模塊的(這里我們簡單了解一下):

    最后

    總結一下這篇文章:

    • 安裝TensorFlow必要的環境
    • 跟著官方文檔,體驗一下TensorFlow(機器學習)的“HelloWorld”

      • 根據給出的例子,猜出使用TensorFlow(機器學習)時需要做哪些步驟
    • TensorFlow就是一個機器學習(深度學習)的框架,提供了很多實用的API方便我們去玩機器學習(深度學習)。

    相信看到這里,很多人都跟我之前一樣,一臉懵逼。對官方給出的例子中的API不熟悉,去查閱相關資料的時候又發現有好多機器學習相關的術語,對這些術語又不了解。然后就循環懵逼..

    while(true){// 循環懵逼.. }

    其實回想剛學Java的時候,也是這么一個過程,當你從屏幕看到“HelloWorld”了以后,大概率來說也是不了解相關的API具體做了什么事(甚至連API都不知道是啥意思)。但花一段時間去學習了以后,就會發現,原來HelloWorld是真的簡單!

    public static void main(String[] args) {System.out.println("Hello World");}

    后續我會繼續更新我學習TensorFlow時的一些筆記,有興趣的小伙伴不妨跟著我一起學習~

    另外,從文章的開頭我也已經說了,我對Python、機器學習都是沒有相關基礎的,如果有寫錯的地方不妨在評論區留言指正。

    下一篇預告:TensorFlow是什么意思?Tensor?Flow?介紹TensorFlow一些最基礎的知識以及常見的機器學習術語。

    樂于輸出干貨的Java技術號:Java3y。號內有200多篇原創技術文章、海量視頻資源、精美腦圖,不妨來關注一下!

    覺得我的文章寫得不錯,不妨點一下

    總結

    以上是生活随笔為你收集整理的从零开始学TensorFlow的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。