除了AutoGraph還有 …… 這兩天TensorFlow真是會搞事情

NO IMAGE

640?wx_fmt=jpeg

編輯 | Jane

出品 | 人工智慧頭條(公眾號ID:AI_Thinker)

 

【人工智慧頭條導讀】昨天谷歌釋出了 TensorFlow 的一個新工具 —— AutoGraph,可以將 Python 程式碼快速轉化到 TensorFlow 的體系裡。目前測試來看,這個工具簡化了構圖流程,加強了 TensorFlow 呼叫 Python 時的效能。昨天晚上 TensorFlow 又宣佈了下一代移動視覺應用支援的新版本 —— MobileNetV2。TensorFlow 官方教程中又不斷新增V 1.9 的 eager execution 例項。這幾天 TensorFlow 可真是一點沒閒著呢。

 

 

AutoGraph

 

我們在 TensorFlow 中構建的計算圖比較難理解,尤其是涉及複雜模型的場景,使用 Python 的一些語句,如 if 、while 或接受結構化輸入的 print ( ) s時都會有一種無力感。而新工具 AutoGraph 的作用就是自動解決這個問題。

 

使用 autograph.convert() 裝飾器來裝飾函式,AutoGraph 將自動生成圖可用的程式碼。

 

 

@autograph.convert()
def fizzbuzz(num):
  if num % 3 == 0 and num % 5 == 0:
      print(‘FizzBuzz’)
  elif num % 3 == 0:
      print(‘Fizz’)
  elif num % 5 == 0:
      print(‘Buzz’)
  else:
      print(num)
  return num

with tf.Graph().as_default():
  # The result works like a regular op: takes tensors in, returns tensors.
  # You can inspect the graph using tf.get_default_graph().as_graph_def()
  num = tf.placeholder(tf.int32)
  result = fizzbuzz(num)
  with tf.Session() as sess:
    for n in range(10,16):
      sess.run(result, feed_dict={num:n})

 

原始碼中也是給出了 6 個示例,比如:

 

Assert

 

 

@autograph.convert()
def f(x):
  assert x != 0, ‘Do not pass zero!’
  return x * x

with tf.Graph().as_default():  
  with tf.Session():
    try:
      print(f(tf.constant(0)).eval())
    except tf.errors.InvalidArgumentError as e:
      print(‘Got error message:\n    %s’ % e.message)

 

Print

 

 

@autograph.convert()
def f(n):
  if n >= 0:
    while n < 5:
      n  = 1
      print(n)
  return n

with tf.Graph().as_default():
  with tf.Session():
    f(tf.constant(0)).eval()

 

Lists

 

 

@autograph.convert()
def f(n):
  z = []
  # We ask you to tell us the element dtype of the list
  autograph.set_element_type(z, tf.int32)

  for i in range(n):
    z.append(i)
  # when you’re done with the list, stack it
  # (this is just like np.stack)
  return autograph.stack(z) 

#tf_f = autograph.to_graph(f)

with tf.Graph().as_default():  
  with tf.Session():
    print(f(tf.constant(3)).eval())

 

If

 

 

@autograph.convert()
def nearest_odd_square(x):
  if x > 0:
    x = x * x
    if x % 2 == 0:
      x = x   1
  return x

with tf.Graph().as_default():  
  with tf.Session() as sess:
    print(sess.run(nearest_odd_square(tf.constant(4))))
    print(sess.run(nearest_odd_square(tf.constant(5))))
    print(sess.run(nearest_odd_square(tf.constant(6))))

 

While Loop

 

 

@autograph.convert()
def square_until_stop(x, y):
  while x < y:
    x = x * x
  return x

with tf.Graph().as_default():  
  with tf.Session() as sess:
    print(sess.run(square_until_stop(tf.constant(4), tf.constant(100))))

 

Break

 

 

@autograph.convert()
def argwhere_cumsum(x, threshold):
  current_sum = 0.0
  idx = 0
  for i in range(len(x)):
    idx = i
    if current_sum >= threshold:
      break
    current_sum  = x[i]
  return idx

N = 10
with tf.Graph().as_default():  
  with tf.Session() as sess:
    idx = argwhere_cumsum(tf.ones(N), tf.constant(float(N/2)))
    print(sess.run(idx))

 

大家知道這個訊息後也紛紛躍躍欲試,不僅嘗試了官方示例,還有自己的新發現。

 

640?wx_fmt=png

via:微博使用者@王詠剛

(https://weibo.com/ygwang?refer_flag=1001030103_)

 

640?wx_fmt=png

via:微博使用者@tobe-陳迪豪

(https://weibo.com/tobegit3hub?profile_ftype=1&is_ori=1#_0)

 

AutoGraph 開啟了構建和訓練模型的新思路,雖然現在還是實驗工具,不過,官方表示會盡快轉移到核心的 TensorFlow 中,建議未來可以嘗試新增更多的功能到 AutoGraph 中,如果廣大的開發愛好者們有自己的心得與建議也可以加入進來,不斷完善。

 

GitHub 地址:

https://github.com/tensorflow/models/blob/master/samples/core/guide/autograph.ipynb

 

Colab 連結:

https://colab.research.google.com/github/tensorflow/models/blob/master/samples/core/guide/autograph.ipynb

 

 

MobileNetV2

 

昨天,TensorFlow 很高興地宣佈——釋出 MobileNetV2 ,它將為下一代移動視覺應用提供支援。

 

去年,TensorFlow 引入了面向移動裝置設計的通用型計算機視覺神經網路 ——MobileNetV1,可支援分類和檢測等功能。在個人移動裝置上執行深度網路可以提升使用者體驗,並允許隨時隨地訪問,並且在安全性、隱私和能耗方面同樣具有優勢。隨著讓使用者與現實世界實時互動的新應用的不斷出現,對更高效神經網路的需求也逐漸增加。

 

MobileNetV2 在 MobileNetV1 的基礎上進行了重大改進,並推動了移動視覺識別技術的發展,包括分類、物件檢測和語義分割。

 

640?wx_fmt=jpeg

MobileNetV2 架構概覽

藍色塊表示上面所示的複合卷積構建塊

   

640?wx_fmt=jpeg

MobileNetV2 提高了速度(縮短了延遲時間)並提高了 ImageNet Top 1 的準確度

 

640?wx_fmt=png

在檢測方面,與新引入的 SSDLite 搭配使用時,在實現相同準確性的情況下,新模型的速度要比 MobileNetV1 快大約 35%。

 

640?wx_fmt=png

為實現裝置上語義分割,在近期宣佈的 DeepLabv3 簡化版中採用 MobileNetV2 作為特徵提取器。與使用 MobileNetV1 作為特徵提取器的效能相似,但前者的引數數量減少 5.3 倍,乘加運算數量減少 5.2 倍。

 

 更多內容大家可以參考:

1.MobileNets:Efficient Convolutional Neural Networks for Mobile Vision Applications, Howard AG, Zhu M, Chen B, Kalenichenko D, Wang W, Weyand T, Andreetto M, Adam H, arXiv:1704.04861, 2017.

 

2.MobileNetV2:Inverted Residuals and Linear Bottlenecks, Sandler M, Howard A, Zhu M, Zhmoginov A, Chen LC. arXiv preprint. arXiv:1801.04381, 2018.

 

3.Rethinking Atrous Convolution for Semantic Image Segmentation, Chen LC, Papandreou G, Schroff F, Adam H. arXiv:1706.05587, 2017.

 

4.Speed/accuracy trade-offs for modern convolutional object detectors, Huang J, Rathod V, Sun C, Zhu M, Korattikara A, Fathi A, Fischer I, Wojna Z, Song Y, Guadarrama S, Murphy K, CVPR 2017.

 

5.Deep Residual Learning for Image Recognition, He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. arXiv:1512.03385,2015

 

 

TensorFlow官方教程:

新增1.9版eager execution例項

 

自上週新版本 V 1.9 釋出以來,TensorFlow 官方教程中又不斷新增 eager execution 例項,主要包括:注意力機器翻譯、文字生成、影象自動描述等教程。大家又可以在週末開始一波操作了!

 

640?wx_fmt=png

640?wx_fmt=png

 

官方連結:

https://www.tensorflow.org/tutorials/

 

—【完】—