Google 開發者大會 (Google Developer Days,簡稱 GDD) 是展示 Google 最新開發者產品和平臺的全球盛會,旨在幫助你快速開發優質應用,發展和留住活躍使用者群,充分利用各種工具獲得更多收益。2018 Google 開發者大會於 9 月 20 日和 21 日於上海舉辦。?Google 開發者大會 2018 掘金專題
2018 年 9 月 20 日 Laurence Moroney(Google 開發者技術推廣工程師)與付弋真(Google Brain 的軟體工程師)帶來一場《TensorFlow 簡介:機器學習技術使用入門》的演講,本文將對演講做一個回顧。
機器學習與傳統程式設計
TensorFlow 是一個採用資料流圖(data flow graphs),用於數值計算的開源軟體庫。節點(Nodes)在圖中表示數學操作,圖中的線(edges)則表示在節點間相互聯絡的多維資料陣列,即張量(tensor)。它靈活的架構讓你可以在多種平臺上展開計算,例如臺式計算機中的一個或多個CPU(或GPU),伺服器,移動裝置等等。TensorFlow 最初由Google大腦小組(隸屬於Google機器智慧研究機構)的研究員和工程師們開發出來,用於機器學習和深度神經網路方面的研究,但這個系統的通用性使其也可廣泛用於其他計算領域。
Laurence Moroney講述了他所經歷的變革:
- 網頁的變革從程式設計師的角度上來說,網頁改變了人們所有的一切。通過網頁,程式設計師們可以寫出讓上億的使用者接觸到的程式。這場變革帶了新的商業模式,比如谷歌、百度、淘寶等等。
- 智慧手機也帶來了一場變革,同樣也帶來了像滴滴和 Uber 這樣的商業體驗。
- 我們正在面臨下個變革,也就是機器學習的變革。
運動檢測APP場景
在藉助手機速度感測器的幫助下,我們可以獲取當前使用者的速度,然後再使用程式碼進行判斷。
- speed < 4 定義為步行,
- 4 <= speed < 12 定義為跑,
- speed > 12 定義為騎車。
一些簡單的運動場景可以通過上述型別的方式進行檢測,倘若像使用者在打高爾夫這種複雜的運動場景是無法被檢測出來,而機器學習可以幫我們解決在這個問題。
傳統程式設計方式是設定規則和資料,從而給出答案。通過Java、Python、C++等語言來編寫規則,在輸入一些資料之後打包編譯成程式,給出答案,簡單運動檢測APP就是這樣實現的。機器學習需要程式設計師提供答案和資料,給答案打上標籤,在資料的配合之下,機器會自己研究出規則。
在機器學習的環境下,程式設計師們需要提供上述所示資料和標籤,機器自己會找出資料之間的關聯,從而得到規則,而不再需要程式設計師自己去定義複雜的規則。這樣會變得更加智慧化,在能檢測簡單的運動狀態的同時,也能夠檢測出向打高爾夫這樣難以用規則去判斷的複雜的運動狀態。 在學習新的事物時,我們的大腦往往是先得到答案和資料,從而總結出經驗規律,這也是機器學習所想要實現的。在玩井字棋(如下圖所示),一開始我們只是瞭解這個遊戲的規則和玩法,但是如何贏得比賽就需要數盤的遊戲經歷,從中總結出經驗。機器學習就是在模仿人類,通過大量的資料和標籤,得到規則,從而解決問題。讓機器像人一樣學習,這是機器學習所要走的第一步。
在機器學習的程式設計中,第一個階段為訓練階段,程式設計師需要提供資料和答案(標籤),從而得到模型。第二個是推理階段,給模型提供資料,它會做出相應的預測。程式碼實踐( 付弋真主講 )
數字之間關係
下面有兩列數字,X 和 Y 之間存在關係。將數字提供給機器,希望機器像人腦一樣學習,從而給出數字之間的關係。 有一定數學基礎的同學,應該很快能夠給出 X 和 Y 之間的關係為:2x - 1 = y。我們在看到這些數字之後,大腦會嘗試去找出一些規律,利用我們所擁有的數學經驗,進行猜測,猜測的驗證結果是正確,所以得到了這個方程式。那通過機器學習如何做到這一點呢?from tensorflow import keras
import numpy as np
model = keras.Sequential([keras.layers.Dense(units = 1, input_shape = [1])])
model.compile(optimizer = 'sgd', loss = 'mean_squared_error')
xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype = float)
ys = np.array([-3.0, -1.0, 1.0, 3.0, 5.0, 7.0], dtype = float)
model.fit(xs, ys, epochs = 500)
print(model.predict([10.0]))
複製程式碼
結果如下:
通過機器學習我們得到值為18.976957,而並不是 19,因為神經網路存在很多種可能性,機器給出的是一個預測的結果而不是一個準確無誤的結果。識別不同的衣服
上圖中有8中不同的衣服,作為人類我們可以分辨每個衣服的種類。那機器能否做到這一點呢?Fashion-MNIST是一個替代MNIST手寫數字集的影象資料集。 它是由Zalando(一家德國的時尚科技公司)旗下的研究部門提供。其涵蓋了來自10種類別的共7萬個不同商品的正面圖片。Fashion-MNIST的大小、格式和訓練集/測試集劃分與原始的MNIST完全一致。60000/10000的訓練測試資料劃分,28x28的灰度圖片。
通過 Fashion-MNIST 資料集,可以對我們的模型進行訓練,不斷地優化,從而提高識別準確率。
import tensorflow as tf
from tensorflow import keras
import numpy as np
# Import the Data
fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, teat_labels) = fashion_mnist.load_data()
# Normalize the data
train_images = train_images / 255.0
test_images = test_images / 255.0
#Define the model
model = keras.Sequential([
keras.layers.Flatten(inport_shape = (28,28)),
keras.layers.Dense(128, activation = tf.nn.relu),
keras.layers.Dense(10, activation = tf.nn.softmax),
])
model.compile(oprimizer = tf.train.AdadeltaOptimizer(),loss = 'sparse_categorical_crossentropy',metrics=['accuracy'])
#Train the model
model.fit(train_images, train_labels, epochs = 5, verbose = 2)
predictions = model.predict(test_images)
print(test_images[4560])
print(np.argmax(predictions[4560]))
複製程式碼
執行結果如下:
在設定5次迭代的前提下,本模型的成功率為 71% 。神經網路可以通過更多的訓練,從而提高準確率。
以上就是本次演講的全部內容,希望對大家有所幫助。 閱讀更多 Google 開發者大會 2018 技術乾貨