internetreadfile讀取數據長度為0_【完結】TensorFlow2.0 快速上手手冊

8f8016e979bb2317d2d94f280b2c7eb1.png

大家好,這是專欄《TensorFlow2.0》的第五篇文章,我們對專欄《TensorFlow2.0》進行一個總結。

我們知道全新的TensorFlow2.0 Alpha已經于2019年3月被發布,新版本對TensorFLow的使用方式進行了重大改進,為了滿足各位AI人對TensorFlow2.0的需求,我們推出了專欄《TensorFlow2.0》,前四篇文章帶大家領略了全新的TensorFlow2.0的變化及具體的使用方法。今天就帶大家總結下TensorFlow2.0的一些變化。

作者 | 湯興旺

編輯 | 言有三

1 默認動態圖機制

在tensorflow2.0中,動態圖是默認的不需要自己主動啟用它。

import tensorflow as tf
a = tf.constant([1,2,3])
b = tf.constant([4,5,6])
print(a+b)

上面的結果是tf.Tensor([5 7 9], shape=(3,), dtype=int32)

可以說有了動態圖,計算是非常方便的了,再也不需要理解復雜的graph和Session了。

另外我們在對比看下Pytorch中是如何計算上面的結果的。

import torch
a = torch.Tensor([1,2,3])
b = torch.Tensor([4,5,6])
print(a+b)

可以發現TensorFlow2.0和Pytorch一樣簡單了,而且代碼基本一樣。

2 棄用collections

我們知道在TensorFlow1.X中可以通過集合 (collection) 來管理不同類別的資源。例如使用tf.add_to_collection 函數可以將資源加入一個或多個集合。使用tf.get_collection獲取一個集合里面的所有資源。這些資源可以是張量、變量或者運行 Tensorflow程序所需要的資源。我們在訓練神經網絡時會大量使用集合管理技術。如通過tf.add_n(tf.get_collection("losses")獲得總損失。

由于collection控制變量很不友好,在TensorFlow2.0中,棄用了collections,這樣代碼會更加清晰。

我們知道TensorFlow2.0非常依賴Keras API,因此如果你使用tf.keras,每個層都會處理自己的變量,當你需要獲取可訓練變量的列表,可直接查詢每個層。

from tensorflow import keras
from tensorflow.keras import Sequential
model = Sequential([keras.layers.Dense(100,activation="relu",input_shape=[2]),keras.layers.Dense(100,activation="relu"),keras.layers.Dense(1)
])

我們通過model.weights,就可以查詢每一層的可訓練的變量。結果如下面這種形式。

<tf.Variable'dense/kernel:0' shape=(2,100)             dtype=float32,   numpy=array([[...]]), dtype=float32)>,

另外在TensorFlow2.0中,也刪除了Variable_scopes和tf.get_variable(),需要用面向對象的方式來處理變量共享。

3 刪除雜亂的API,重用Keras

之前TensorFlow1.X中包含了很多重復的API或者不推薦使用的 API,雜亂無章,例如可以使用 tf.layers或tf.keras.layers創建圖層,這樣會造成很多重復和混亂的代碼。

如今TensorFlow 2.0正在擺脫tf.layers,重用Keras 層,可以說如果你使用TensorFlow2.0,那么使用Keras構建深度學習模型是你的不二選擇。

詳細介紹請看文后第二篇文章《以后我們再也離不開Kera了》。

另外tf.contrib的各種項目也已經被合并到Keras等核心API 中,或者移動到單獨的項目中,還有一些將被刪除。

可以說TensorFlow 2.0會更好地組織API,使編碼更簡潔。

4 學習TensorFlow2.0的建議

不管你是AI小白,還是已經學習很久的大神,對于TensorFlow2.0,我們或許都需要重新學,因為它的變化太多了。當你學習TensorFlow2.0時,有如下建議供你參考:

首先不要上來就是import tensorflow as tf。其實沒有必要,我建議大家先把數據預處理先學會了。比如數據你怎么read,怎么數據增強。

這個可以查看文后第三篇文章《數據讀取與使用方式》。

這篇文章介紹了Tensorflow2.0讀取數據的二種方式,分別是Keras API和Dataset類對數據預處理。

另外對于數據導入方式,最好使用Dataset類,個人認為這個比較方便。一個簡單的例子如下:

import tensorflow as tf
import tensorflow_datasets as tfds
dataset, metadata = tfds.load('fashion_mnist', as_supervised=True, with_info=True)
train_dataset, test_dataset = dataset['train'], dataset['test']
train_dataset = train_dataset.shuffle(100).batch(12).repeat()
for img, label in train_dataset.take(1):img = img.numpy()print(img.shape)print(img)

從上面的代碼我們可以看出在2.0中導入數據沒有make_one_shot_iter() 這樣的方法了。這個方法已經被棄用了,直接用 take(1)。

當你學會了讀取數據和數據增強后,你就需要學會如何使用TensorFlow2.0構建網絡模型,在TensorFlow2.0中搭建網絡模型主要使用的就是Keras高級API。

如果你想要學會這個本領,可以參考文后的第四篇文章《如何搭建網絡模型》。

在這篇文章我們詳細介紹了如何使用Keras API搭建線性模型VGG16和非線性模型Resnet。如果你是AI小白,想要更好的掌握TensorFlow2.0,建議你使用TensorFlow2.0完成搭建VGG、GoogLeNet、Resnet等模型,這樣對你掌握深度學習框架和網絡結構更有幫助。

當你完成了數據讀取和模型搭建后,現在你需要做的就是訓練模型和可視化了。一個簡單的示例如下:

import tensorflow as tf
from tensorflow.keras.callbacks import TensorBoard
from tensorflow.keras.optimizers import SGD
from tensorflow.keras.preprocessing.image import ImageDataGeneratormodel = tf.keras.models.Sequential([tf.keras.layers.Conv2D(12, (3,3), activation='relu', input_shape=(48, 48, 3),strides=(2, 2), padding='same'),tf.keras.layers.BatchNormalization(axis=3),tf.keras.layers.Conv2D(24, (3,3), activation='relu',strides=(2, 2), padding='same'),tf.keras.layers.BatchNormalization(axis=3),tf.keras.layers.Conv2D(48, (3,3), activation='relu',strides=(2, 2), padding='same'),tf.keras.layers.BatchNormalization(axis=3),tf.keras.layers.Flatten(),tf.keras.layers.Dense(128, activation='relu'),tf.keras.layers.Dense(1, activation='sigmoid')
])model.compile(loss='binary_crossentropy',optimizer = SGD(lr=0.001, decay=1e-6, momentum=0.9),metrics=['acc'])
train_datagen = ImageDataGenerator(rescale=1/255, shear_range=0.2,zoom_range=0.2, horizontal_flip=True)
validation_datagen = ImageDataGenerator(rescale=1/255)
train_generator = train_datagen.flow_from_directory(r"D://Learning//tensorflow_2.0//data//train",  # 訓練集的根目錄target_size=(48, 48),  # 所有圖像的分辨率將被調整為48x48batch_size=32,        # 每次讀取32個圖像# 類別模式設為二分類class_mode='binary')# 對驗證集做同樣的操作
validation_generator = validation_datagen.flow_from_directory(r"D://Learning//tensorflow_2.0//data//val",target_size=(48, 48),batch_size=16,class_mode='binary')
history = model.fit_generator(train_generator,steps_per_epoch=28,epochs=500,verbose=1,validation_data = validation_generator,callbacks=[TensorBoard(log_dir=(r"D:Learninglogs"))],validation_steps=6)

上面簡單示例的數據集是我們框架系列文章一直所用的表情二分類數據集。從上面的代碼我們可以看出從數據讀取到模型定義再到訓練和可視化基本用的都是Keras 高級API,這里不再贅述。需要下載數據集的請移步github。

acc和loss可視化結果如下兩圖,可以看出效果還是比較可以的,上面的代碼已經同步到有三AI的GitHub項目,如下第一個。

98ac2821d8667e5f3948dffa2007547d.png

b5b4d3f88cc4a72f4afc4f98db32174c.png

5 TensorFlow2.0優秀的github

1、https://github.com/tangxingwang/yousan.ai
1、https://github.com/czy36mengfei/tensorflow2_tutorials_chinese
3、https://github.com/jinfagang/yolov3_tf2

總結

本期我們總結了TensorFlow2.0的變化及使用方法,而且還介紹了學習它的方法和一些比較好的Github。希望您盡快能掌握它!

往期

  • 有三AI一周年了,說說我們的初衷,生態和愿景
  • 【TensorFlow2.0】TensorFlow2.0專欄上線,你來嗎?
  • 【TensorFlow2.0】以后我們再也離不開Keras了?
  • 【TensorFlow2.0】數據讀取與使用方式
  • 【TensorFlow2.0】如何搭建網絡模型?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259021.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259021.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259021.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Facial Landmark Detection(人臉特征點檢測)

原文地址&#xff1a;http://www.learnopencv.com/facial-landmark-detection/#comment-2471797375 作為計算機視覺研究員&#xff0c;我們很早就開始研究人臉。人臉分析領域最廣為人知的就是人臉識別&#xff08;face recognition&#xff09;.但是為了識別一幅圖像中的人臉&…

cpu卡操作協議iso14443協議

http://baike.baidu.com/link?url3mef2ZMRoNuBrVLA2HpEh8xrBtzACdIi5nIDUsMyVkA8OulIXGWgswvFcTiBfh_B轉載于:https://www.cnblogs.com/shuenjian901/p/3496331.html

Python 字符串的內置函數

方法描述string.capitalize()把字符串的第一個字符大寫string.center(width)返回一個原字符串居中,并使用空格填充至長度 width 的新字符串string.count(str, beg0, endlen(string))返回 str 在 string 里面出現的次數&#xff0c;如果 beg 或者 end 指定則返回指定范圍內 str …

Java中的Error和Exceptiond的異同點

Error和Exception的異同點&#xff1a; &#xff08;1&#xff09;Error類和Exception類都繼承超類Java.lang.Throwable &#xff08;2&#xff09;Error&#xff1a;一般指與虛擬機相關的問題&#xff0c;如系統崩潰&#xff0c;內存溢出等。對于這類錯誤&#xff0c;僅靠程序…

python算法題_python基本算法題(一)

1、3位水仙花數計算 "3位水仙花數”是指一個三位整數&#xff0c;其各位數字的3次方和等于該數本身。 例如&#xff1a; ABC是一個“3位水仙花數”&#xff0c;則&#xff1a;A的3次方&#xff0b;B的3次方&#xff0b;C的3次方 ABC。 使用Python&#xff0c;輸出所有的3…

虛擬機環境下安裝ESX不能安裝虛擬系統解決方案

在虛擬機環境&#xff08;ESX、workstation等&#xff09;下安裝ESX或workstation等虛擬機&#xff0c;在虛擬機上再安裝操作系統&#xff0c;會提示“虛擬系統不能啟動&#xff0c;直到你配置了外部虛擬機&#xff08;vmware esx in a virtual machine requires the outer vir…

superviseddescent (SDM C++11實現)環境配置

今天試著用了一下SDM的C11實現&#xff0c;本來以為挺簡單的&#xff0c;可是配置環境還是花了一些時間。為了給自己留下一些記憶&#xff0c;特把配置過程記錄下來。 這個實現是C11的版本&#xff0c;是一個通用版本&#xff0c;里面包含了很多的功能&#xff0c;比如函數的最…

1008: University

臺州ACM&#xff1a;1008: University Description 在大學里&#xff0c;非常多單詞都是一詞多義。偶爾在文章里還要用引申義。這困擾Redraiment非常長的時間。 他開始搜集那些單詞的全部意義。他發現了一些規律&#xff0c;比如 “a”能用“e”來取代, “c”能用“f”來取代……

Android 5.1 API 22 所有sdk文件下載地址

開源中國的 IT 公司開源軟件整理計劃介紹 https://dl-ssl.google.com/android/repository/docs-22_r01.ziphttp://dl.google.com/android/repository/android-22_r01.ziphttps://dl-ssl.google.com/android/repository/samples-22_r05.ziphttps://dl-ssl.google.com/android/re…

python圖形小游戲代碼_手把手制作Python小游戲:俄羅斯方塊(一)

手把手制作Python小游戲&#xff1a;俄羅斯方塊1大家好&#xff0c;新手第一次寫文章&#xff0c;請多多指教 A.準備工作&#xff1a; 這里我們運用的是Pygame庫&#xff0c;因為Python沒有內置&#xff0c;所以需要下載 如果沒有pygame&#xff0c;可以到官網下載 pygame官網&…

關于Git使用的一些心得

2019獨角獸企業重金招聘Python工程師標準>>> 本篇稍微記錄下Git使用的一些心得。 對Git的使用&#xff0c;應該是從搭建自己的博客開始的。當時看到開源中國推薦的一篇基于碼云hexo搭建自己博客的文章。所以就花了一天時間鼓搗了下博客。 順帶整理下目前能看到我寫的…

Dlib機器學習庫安裝

昨天使用了一下dlib的人臉檢測功能&#xff0c;效果出奇的好。下面給出dlib整個的安裝過程和使用指導。 下載安裝 我們可以從dlib的官網下載最新的版本&#xff0c;我的是dlib18.18.然后我們需要使用cmake編譯dlib庫和examples示例。 當然前提是你要按照好cmake和opencv。 …

struts2上傳

今天在使用struts2上傳的過程中無意發現,struts2上傳一個文件大小為0字節的文本竟然會報錯FileNotFoundException,嘗試了好久也沒找到答案,最后只能判斷文件的大小后上傳,至于文件字節為0的怎么處理就看各位了 struts2上傳java源碼 1 package com.jzgx.web.action;2 3 import j…

BitSet之為什么用long保存信息

BitSet內部使用long[] words來保存位信息。咋看之下并不理解原因&#xff0c;在解讀set(int bitIndex)之后似乎有了一些領悟。 public void set(int bitIndex) { if (bitIndex < 0) throw new IndexOutOfBoundsException("bitIndex < 0: " bitIndex); //用來計…

ipv4地址是幾位二進制數_幾張思維導圖,讓你清楚的知道ip地址怎么回事?

網絡工程中&#xff0c;ip地址是必須要了解的內容&#xff0c;今天我們用幾張思維導圖來給大家詳細講解IP地址。一、什么是IP地址在生活中我們使用具有上網功能的電子設備都有IP地址&#xff0c;就跟每個人都有自己的名字一樣。IP地址分為IPV4 IPV6&#xff0c;我們所說的的IP地…

《關系營銷2.0——社交網絡時代的營銷之道》一檢查拼寫和語法

本節書摘來異步社區《關系營銷2.0——社交網絡時代的營銷之道》一書中的第2章&#xff0c;作者&#xff1a; 【美】Mari Smith 譯者&#xff1a; 張猛 , 于宏 , 趙俐 責編&#xff1a; 陳冀康, 更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 檢查拼寫和語法 關系營銷2…

dlib人臉檢測功能介紹

本文主要介紹三個點&#xff1a; 1. 如何單獨建立一個工程&#xff0c;使用dlib的人臉檢測功能。 2. 提高人臉檢測率的兩個方法 3. 加速人臉檢測的方法 下面圍繞這幾個點展開敘述。 建人臉檢測工程 1 . 首先我們先使用上期說的examples里的人臉檢測。 我們只要將face_de…

ios網絡開發 網絡狀態檢查

http://www.cnblogs.com/hanjun/archive/2012/12/01/2797622.html 網絡連接中用到的類&#xff1a; 一.Reachability 1.添加 Reachability 的.h和.m文件&#xff0c;再添加SystemConfiguration.framework。 2.Reachability中定義了三種網絡狀態&#xff1a; typedef Num{ NotR…

delphi xe4 ini文件不能讀取的解決方法

今天發現用inifiles下 tinifile.readstring方法突然不能讀數據了&#xff0c;結果把ini文件格式由utf-8改成unicode后就能正常讀取了。轉載于:https://www.cnblogs.com/liqiao/p/3503985.html

《眾妙之門——網頁排版設計制勝秘訣》——3.4 展現品牌視覺的同時保持網頁的可讀性...

本節書摘來自異步社區《眾妙之門——網頁排版設計制勝秘訣》一書中的第3章&#xff0c;第3.4節&#xff0c;作者&#xff1a; 【德】Smashing Magazine 譯者&#xff1a; 侯景艷 , 范辰 更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 3.4 展現品牌視覺的同時保持網頁的…