国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

這是我看過解釋TensorFlow最透徹的文章!

人工智能 深度學習
本文不會研究某個具體任務,而是提出更加通用的方法,并解析 Tensorflow 的基礎抽象概念。掌握好這些概念后,用 Tensorflow 進行深度學習就會更加直觀易懂。

導讀:“我叫 Jacob,是谷歌 AI Residency 項目的學者。2017 年夏天我進入這個項目的時候,我自己的編程經驗很豐富,對機器學習理解也很深刻,但以前我從未使用過 Tensorflow。當時我認為憑自己的能力可以很快掌握 Tensorflow,但沒想到我學習它的過程竟然如此跌宕起伏。甚至加入項目幾個月后我還偶爾會感到困惑,不知道怎樣用 Tensorflow 代碼實現自己的新想法。

[[234609]]

這篇博文就像是我給過去自己寫的瓶中信:回顧當初,我希望在開始學習的時候有這樣一篇入門介紹。我也希望本文能夠幫助同行,為他們提供參考。”AI 前線將這位現谷歌大腦工程師關于學習 Tensorflow 過程中遭遇的方方面面難題的文章做了翻譯,希望對大家有幫助。

過去的教程缺少哪些內容?

Tensorflow 發布已經有三年,如今它已成為深度學習生態系統的基石。然而對于初學者來說它并不怎么簡單易懂,與 PyTorch 或 DyNet 這樣的運行即定義的神經網絡庫相比就更明顯了。

有很多 Tensorflow 的入門教程,內容涵蓋線性回歸、MNIST 分類乃至機器翻譯。這些內容具體、實用的指南能幫助人們快速啟動并運行 Tensorflow 項目,并且可以作為類似項目的切入點。但有的開發者開發的應用并沒有很好的教程參考,還有的項目在探索全新的路線(研究中很常見),對于這些開發者來說入門 Tensorflow 是非常容易感到困惑的。

我寫這篇文章就想彌補這一缺口。本文不會研究某個具體任務,而是提出更加通用的方法,并解析 Tensorflow 的基礎抽象概念。掌握好這些概念后,用 Tensorflow 進行深度學習就會更加直觀易懂。

目標受眾

本教程適用于在編程和機器學習方面有一定經驗,并想要入門 Tensorflow 的從業者。他們可以是:想在深度學習課程的***一個項目中使用 Tensorflow 的 CS 專業學生;剛剛被調到涉及深度學習的項目的軟件工程師;或者是一位處于困惑之中的 Google AI 新手(向 Jacob 大聲打個招呼吧)。如果你需要基礎知識入門,請參閱以下資源。這些都了解的話,我們就開始吧!

理解 Tensorflow

Tensorflow 不是一個普通的 Python 庫。

大多數 Python 庫被編寫為 Python 的自然擴展形式。當你導入一個庫時,你得到的是一組變量、函數和類,它們補充并擴展了你的代碼“工具箱”。使用這些庫時,你知道它們將產生怎樣的結果。我認為談及 Tensorflow 時應該拋棄這些認識,這些認知從根本上就不符合 Tensorflow 的理念,無法反映 TF 與其它代碼交互的方式。

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

與 HTML 類似,Tensorflow 是用于表示某種類型的計算抽象(稱為“計算圖”)的框架。當我們用 Python 操作 Tensorflow 時,我們用 Python 代碼做的***件事是組裝計算圖。之后我們的第二個任務就是與它進行交互(使用 Tensorflow 的“會話”)。但重要的是,要記住計算圖不在變量內部,它處在全局命名空間內。莎士比亞曾經說過:“所有的 RAM 都是一個階段,所有的變量都只不過是指針。”

***個關鍵抽象:計算圖

我們在瀏覽 Tensorflow 文檔時,有時會發現內容提到“圖形”和“節點”。如果你仔細閱讀、深入挖掘,甚至可能已經發現了這個頁面,該頁面中涵蓋的內容我將以更精確和技術化的風格詳細解釋。本節將從頂層入手,把握關鍵的直覺概念,同時略過一些技術細節。

那么什么是計算圖?它實質上是一個全局數據結構:計算圖是一個有向圖,捕獲有關計算方法的指令。

我們來看看如何構建一個示例。下圖中,上半部分是我們運行的代碼和它的輸出,下半部分是結果計算圖。 

這是我看過解釋TensorFlow最透徹的文章!

顯然,僅僅導入 Tensorflow 并不會給我們生成一個有趣的計算圖,而只有一個孤獨的,空白的全局變量。但是當我們調用一個 Tensorflow 操作時會發生什么呢? 


快看!我們得到了一個節點,它包含常量:2。我知道你很驚訝,驚訝的是一個名為 tf.constant 的函數。當我們打印這個變量時,我們看到它返回一個 tf.Tensor 對象,它是一個指向我們剛創建的節點的指針。為了強調這一點,這里是另一個例子:

這是我看過解釋TensorFlow最透徹的文章! 

每次我們調用 tf.constant 的時候,我們都會在圖中創建一個新節點。即使節點在功能上與現有節點完全相同,即使我們將節點重新分配給同一個變量,甚至我們根本沒有將其分配給變量,結果都一樣。

相反,如果創建一個新變量并將其設置為與現有節點相等,則只需將該指針復制到該節點,并且不會向該圖添加任何內容: 


好的,我們更進一步。 

這是我看過解釋TensorFlow最透徹的文章!

現在我們來看——這才是我們要的真正的計算圖表!請注意,+ 操作在 Tensorflow 中過載,所以同時添加兩個張量會在圖中增加一個節點,盡管它看起來不像是 Tensorflow 操作。

好的,所以 two_node 指向包含 2 的節點,three_node 指向包含 3 的節點,而 sum_node 指向包含... + 的節點?什么情況?它不是應該包含 5 嗎?

事實證明,沒有。計算圖只包含計算步驟,不包含結果。至少...... 還沒有!

第二個關鍵抽象:會話

如果錯誤地理解 TensorFlow 抽象也有個瘋狂三月競賽(美國大學籃球繁忙冠軍賽季),那么“會話”將成為每年排名***的種子選手。能獲此尷尬的榮譽,是因為會話的命名反直覺,應用卻如此廣泛——幾乎每個 Tensorflow 程序都至少會調用一次 tf.Session () 。

會話的作用是處理內存分配和優化,使我們能夠實際執行由圖形指定的計算。可以將計算圖想象為我們想要執行的計算的“模板”:它列出了所有的步驟。為了使用這個圖表,我們還需要發起一個會話,它使我們能夠實際地完成任務。例如,遍歷模板的所有節點來分配一組用于存儲計算輸出的存儲器。為了使用 Tensorflow 進行各種計算,我們既需要圖也需要會話。

會話包含一個指向全局圖的指針,該指針通過指向所有節點的指針不斷更新。這意味著在創建節點之前還是之后創建會話都無所謂。

創建會話對象后,可以使用 sess.run (node) 返回節點的值,并且 Tensorflow 將執行確定該值所需的所有計算。

 

 

精彩!我們還可以傳遞一個列表,sess.run ([node1,node2,...]),并讓它返回多個輸出:

 

 

一般來說,sess.run () 調用往往是***的 TensorFlow 瓶頸之一,所以調用它的次數越少越好??梢缘脑捲谝粋€ sess.run () 調用中返回多個項目,而不是進行多個調用。

占位符和 feed_dict

我們迄今為止所做的計算一直很乏味:沒有機會獲得輸入,所以它們總是輸出相同的東西。一個實用的應用可能涉及構建這樣一個計算圖:它接受輸入,以某種(一致)方式處理它,并返回一個輸出。

最直接的方法是使用占位符。占位符是一種用于接受外部輸入的節點。

 

 

……這是個糟糕的例子,因為它引發了一個異常。占位符預計會被賦予一個值,但我們沒有提供,因此 Tensorflow 崩潰了。

為了提供一個值,我們使用 sess.run () 的 feed_dict 屬性。

 

 

好多了。注意傳遞給 feed_dict 的數值格式。這些鍵應該是與圖中占位符節點相對應的變量(如前所述,它實際上意味著指向圖中占位符節點的指針)。相應的值是要分配給每個占位符的數據元素——通常是標量或 Numpy 數組。第三個關鍵抽象:計算路徑下面是另一個使用占位符的例子:

 

 

為什么第二次調用 sess.run () 會失敗?我們并沒有在檢查 input_placeholder,為什么會引發與 input_placeholder 相關的錯誤?答案在于最終的關鍵 Tensorflow 抽象:計算路徑。還好這個抽象非常直觀。

當我們在依賴于圖中其他節點的節點上調用 sess.run () 時,我們也需要計算這些節點的值。如果這些節點有依賴關系,那么我們需要計算這些值(依此類推......),直到達到計算圖的“頂端”,也就是所有的節點都沒有前置節點的情況。

考察 sum_node 的計算路徑:

 

 

所有三個節點都需要評估以計算 sum_node 的值。最重要的是,這里面包含了我們未填充的占位符,并解釋了例外情況!

相反,考察 three_node 的計算路徑:

 

根據圖的結構,我們不需要計算所有的節點也可以評估我們想要的節點!因為我們不需要評估 placeholder_node 來評估 three_node,所以運行 sess.run (three_node) 不會引發異常。

Tensorflow 僅通過必需的節點自動路由計算這一事實是它的巨大優勢。如果計算圖非常大并且有許多不必要的節點,它就能節約大量運行時間。它允許我們構建大型的“多用途”圖形,這些圖形使用單個共享的核心節點集合根據采取的計算路徑來做不同的任務。對于幾乎所有應用程序而言,根據所采用的計算路徑考慮 sess.run () 的調用方法是很重要的。

變量和副作用

到目前為止,我們已經看到兩種類型的“無祖先”節點:tf.constant(每次運行都一樣)和 tf.placeholder(每次運行都不一樣)。還有第三種節點:通常情況下具有相同的值,但也可以更新成新值。這個時候就要用到變量。

了解變量對于使用 Tensorflow 進行深度學習來說至關重要,因為模型的參數就是變量。在訓練期間,你希望通過梯度下降在每個步驟更新參數,但在計算過程中,你希望保持參數不變,并將大量不同的測試輸入集傳入到模型中。模型所有的可訓練參數很有可能都是變量。

要創建變量,請使用 tf.get_variable ()。tf.get_variable () 的前兩個參數是必需的,其余是可選的。它們是 tf.get_variable (name,shape)。name 是一個唯一標識這個變量對象的字符串。它在全局圖中必須是唯一的,所以要確保不會出現重復的名稱。shape 是一個與張量形狀相對應的整數數組,它的語法很直觀——每個維度對應一個整數,并按照排列。例如,一個 3×8 的矩陣可能具有形狀 [3,8]。要創建標量,請使用空列表作為形狀:[]。

 

 

發現另一個異常。一個變量節點在***創建時,它的值基本上就是“null”,任何嘗試對它進行計算的操作都會拋出這個異常。我們只能先給一個變量賦值后才能用它做計算。有兩種主要方法可以用于給變量賦值:初始化器和 tf.assign ()。我們先看看 tf.assign ():

 

 

與我們迄今為止看到的節點相比,tf.assign (target,value) 有一些獨特的屬性:

  1. 標識操作。tf.assign (target,value) 不做任何計算,它總是與 value 相等。
  2. 副作用。當計算“流經”assign_node 時,就會給圖中的其他節點帶來副作用。在這種情況下,副作用就是用保存在 zero_node 中的值替換 count_variable 的值。
  3. 非依賴邊。即使 count_variable 節點和 assign_node 在圖中是相連的,兩者都不依賴于其他節點。這意味著在計算任一節點時,計算不會通過該邊回流。不過,assign_node 依賴 zero_node,它需要知道要分配什么。

“副作用”節點充斥在大部分 Tensorflow 深度學習工作流中,因此,請確保你對它們了解得一清二楚。當我們調用 sess.run (assign_node) 時,計算路徑將經過 assign_node 和 zero_node。

 

當計算流經圖中的任何節點時,它還會讓該節點控制的副作用(綠色所示)起效。由于 tf.assign 的特殊副作用,與 count_variable(之前為“null”)關聯的內存現在被***設置為 0。這意味著,當我們下一次調用 sess.run (count_variable) 時,不會拋出任何異常。相反,我們將得到 0。

接下來,讓我們來看看初始化器:

 

 

這里都發生了什么?為什么初始化器不起作用?

問題在于會話和圖之間的分隔。我們已經將 get_variable 的 initializer 屬性指向 const_init_node,但它只是在圖中的節點之間添加了一個新的連接。我們還沒有做任何與導致異常有關的事情:與變量節點(保存在會話中,而不是圖中)相關聯的內存仍然為“null”。我們需要通過會話讓 const_init_node 更新變量。

 

 

為此,我們添加了另一個特殊節點:init = tf.global_variables_initializer ()。與 tf.assign () 類似,這是一個帶有副作用的節點。與 tf.assign () 不一樣的是,我們實際上并不需要指定它的輸入!tf.global_variables_initializer () 將在其創建時查看全局圖,自動將依賴關系添加到圖中的每個 tf.initializer 上。當我們調用 sess.run (init) 時,它會告訴每個初始化器完成它們的任務,初始化變量,這樣在調用 sess.run (count_variable) 時就不會出錯。

變量共享

你可能會碰到帶有變量共享的 Tensorflow 代碼,代碼有它們的作用域,并設置“reuse=True”。我強烈建議你不要在代碼中使用變量共享。如果你想在多個地方使用單個變量,只需要使用指向該變量節點的指針,并在需要時使用它。換句話說,對于打算保存在內存中的每個參數,應該只調用一次 tf.get_variable ()。

優化器

***:進行真正的深度學習!如果你還在狀態,那么其余的概念對于你來說應該是非常簡單的。

在深度學習中,典型的“內循環”訓練如下:

  • 獲取輸入和 true_output
  • 根據輸入和參數計算出一個“猜測”
  • 根據猜測和 true_output 之間的差異計算出一個“損失”
  • 根據損失的梯度更新參數

讓我們把所有東西放在一個腳本里,解決一個簡單的線性回歸問題:

 

 

 

正如你所看到的,損失基本上沒有變化,而且我們對真實參數有了很好的估計。這部分代碼只有一兩行對你來說是新的:

 

既然你對 Tensorflow 的基本概念已經有了很好的理解,這段代碼應該很容易解釋!***行,optimizer = tf.train.GradientDescentOptimizer (1e-3) 不會向圖中添加節點。它只是創建了一個 Python 對象,包含了一些有用的函數。第二行 train_op = optimizer.minimize (loss),將一個節點添加到圖中,并將一個指針賦給 train_op。train_op 節點沒有輸出,但有一個非常復雜的副作用:

train_op 回溯其輸入的計算路徑,尋找變量節點。對于找到的每個變量節點,它計算與損失相關的變量梯度。然后,它為該變量計算新值:當前值減去梯度乘以學習率。***,它執行一個賦值操作來更新變量的值。

基本上,當我們調用 sess.run (train_op) 時,它為我們對所有的變量做了一個梯度下降的操作。當然,我們還需要使用 feed_dict 來填充輸入和輸出占位符,并且我們還希望打印這些損失,因為這樣方便調試。

用 tf.Print 進行調試

當你開始使用 Tensorflow 做更復雜的事情時,你需要進行調試。一般來說,檢查計算圖中發生了什么是很困難的。你不能使用常規的 Python 打印語句,因為你永遠無法訪問到要打印的值——它們被鎖定在 sess.run () 調用中。舉個例子,假設你想檢查一個計算的中間值,在調用 sess.run () 之前,中間值還不存在。但是,當 sess.run () 調用返回時,中間值不見了!

我們來看一個簡單的例子。

 

我們看到了結果是 5。但是,如果我們想檢查中間值 two_node 和 three_node,該怎么辦?檢查中間值的一種方法是向 sess.run () 添加一個返回參數,該參數指向要檢查的每個中間節點,然后在返回后打印它。

 

這樣做通常沒有問題,但當代碼變得越來越復雜時,這可能有點尷尬。更方便的方法是使用 tf.Print 語句。令人困惑的是,tf.Print 實際上是 Tensorflow 的一種節點,它有輸出和副作用!它有兩個必需的參數:一個要復制的節點和一個要打印的內容列表。“要復制的節點”可以是圖中的任何節點,tf.Print 是與“要復制的節點”相關的標識操作,也就是說,它將輸出其輸入的副本。不過,它有個副作用,就是會打印“打印清單”里所有的值。

 

 

有關 tf.Print 的一個重要卻有些微妙的點:打印其實只是它的一個副作用。與所有其他副作用一樣,只有在計算流經 tf.Print 節點時才會進行打印。如果 tf.Print 節點不在計算路徑中,則不會打印任何內容。即使 tf.Print 節點正在復制的原始節點位于計算路徑上,但 tf.Print 節點本身可能不是。這個問題要注意!當這種情況發生時,它會讓你感到非常沮喪,你需要費力地找出問題所在。一般來說,***在創建要復制的節點后立即創建 tf.Print 節點。

 

 

這里(https://wookayin.github.io/tensorflow-talk-debugging/#1)有一個很好的資源,提供了更多實用的調試建議。

結論

希望這篇文章能夠幫助你更好地理解 Tensorflow,了解它的工作原理以及如何使用它。畢竟,這里介紹的概念對所有 Tensorflow 程序來說都很重要,但這些還都只是表面上的東西。在你的 Tensorflow 探險之旅中,你可能會遇到各種你想要使用的其他有趣的東西:條件、迭代、分布式 Tensorflow、變量作用域、保存和加載模型、多圖、多會話和多核數據加載器隊列等。

責任編輯:未麗燕 來源: AI前線
相關推薦

2022-07-14 14:18:59

Kubernetes架構

2019-04-08 20:20:37

2024-03-26 00:54:42

預測模型數據

2023-06-26 00:19:13

2019-12-02 09:50:44

微服務架構數據

2025-02-06 11:52:44

2018-05-15 15:27:06

IT行業培訓語言

2023-09-04 11:32:28

數據診斷模型

2025-05-09 02:22:00

數據指標體系

2019-05-29 10:04:38

CAP理論 AP

2020-08-11 10:40:31

裝飾者模式Java組件

2012-10-31 09:16:36

IT管理

2019-01-21 15:17:59

Java微軟JCP

2018-04-17 13:15:26

Python模塊

2024-01-01 22:28:52

2019-12-13 16:19:15

戴爾

2014-05-27 09:13:07

2017-07-18 16:14:06

FileProvideAndroidStrictMode

2018-11-05 08:10:30

Netty架構模型
點贊
收藏

51CTO技術棧公眾號

国产亚洲欧美视频| 久久综合给合久久狠狠色| 中文字幕精品在线视频| 精品国产免费一区二区三区四区| 色狠狠桃花综合| 国产精品国产三级国产| 国产 欧美在线| 免费成人性网站| 久久婷婷丁香| 99日韩精品| 日韩图片一区| 在线欧美亚洲| 女人香蕉久久**毛片精品| 欧美日韩水蜜桃| 精品黄色一级片| 蜜臀av免费一区二区三区| 日韩系列在线| 福利片一区二区| 欧美男男freegayvideosroom| aaa国产精品| 伦理一区二区三区| 亚洲小说图片视频| 亚洲涩涩av| 免费短视频成人日韩| 天堂俺去俺来也www久久婷婷| 欧美sss在线视频| 欧美激情在线精品一区二区三区| 国产99亚洲| 成人三级视频| 欧美高清日韩| 欧美亚洲网站| 国产尤物一区二区| av在线不卡电影| 中文字幕高清一区| 一区二区三区丝袜| 欧美色另类天堂2015| 欧美日韩精品三区| 精品久久99ma| 久久久另类综合| 欧美日韩亚洲综合一区二区三区激情在线 | 亚洲精品少妇网址| 高清国产一区二区三区| 色婷婷av在线| 中国一区二区三区| 亚洲影院色无极综合| 精品99久久久久久| 亚洲欧美电影一区二区| 校园春色另类视频| yy4480电影网| 日本不卡免费新一二三区| 欧美在线免费视屏| 精品在线观看视频| 极品束缚调教一区二区网站 | 91久久久亚洲精品| 亚洲国产综合91精品麻豆| 麻豆免费看一区二区三区| 99热国内精品| 日本美女在线中文版| 亚洲狼人综合干| 久久精品视频16| 明星裸体视频一区二区| 91精品啪在线观看国产60岁| 亚洲国产成人在线| 一区二区三区国产在线| 日韩三级av| av资源在线看片| 免费观看成年在线视频网站| 在线观看国产一级片| 北条麻妃视频在线| 九色视频网站在线观看| 中文在线天堂网| 精品美女调教视频| 久青草国产在线| 日韩国产欧美一区| 久久99久久99精品| 精品福利一区二区三区免费视频| 欧美精品激情在线观看| 国产一区二区导航在线播放| av丝袜在线| 日韩欧美一级在线| www.亚洲男人天堂| 国产精品另类一区| 任我爽精品视频在线播放| 男人的天堂在线播放| 亚洲自拍小视频免费观看| 91九色最新地址| 久久精品国语| 99亚洲伊人久久精品影院| 欧美啪啪免费视频| 人九九综合九九宗合| 色先锋资源久久综合| 媚黑女一区二区| 伊人久久国产| 搡女人真爽免费午夜网站| 国产精品91久久| 欧美影院午夜播放| 黑人巨大精品欧美一区| 亚洲欧洲一二区| 先锋影音资源999| 99se婷婷在线视频观看| 精品国产免费人成电影在线观看四季| 成人深夜视频在线观看| 亚洲丝袜美腿一区| 欧美精品一区二区三区在线四季 | av资源中文在线天堂| 日韩成人在线免费观看| 久久久久久久久免费| 日韩精品一卡| 美女高潮视频在线看| 宅男噜噜噜66国产免费观看| 91在线看www| 亚洲一品av免费观看| 一区二区三区在线免费播放| 丝袜美腿亚洲色图| 777久久精品| 成人免费看片| 五月婷婷丁香综合网| 另类欧美小说| 欧美国产日本高清在线 | 日本一区二区三区四区五区六区| 久久久久在线观看| 666欧美在线视频| 国产精品青草综合久久久久99| 午夜精品视频| 9999精品视频| h视频在线免费| 黑森林福利视频导航| 国产福利久久精品| 日韩一区视频在线| 午夜激情一区| 99爱在线视频| 免费观看v片在线观看| 成人免费看片视频在线观看| 国产精品免费视频xxxx| 亚洲天堂影视av| 欧美网站大全在线观看| 中文字幕精品一区二区三区精品| 羞羞答答国产精品www一本| 日韩精选在线| 日韩免费福利视频| 福利视频在线看| 欧美华人在线视频| 欧美日韩中字一区| 中文字幕一区在线观看视频| 久久国产成人午夜av影院| 99久久综合| 999久久精品| 在线中文字幕播放| 日本在线看片免费人成视1000| 调教视频vk| 波多野结衣家庭教师在线| 日韩精品极品视频在线观看免费| 国产精品视频自拍| 久久久久久亚洲| 色黄久久久久久| 亚洲成人网在线观看| 国产毛片久久| 久久电影在线| 国产激情欧美| 天堂√8在线中文| 成人在线播放| 国产在线色视频| 午夜在线观看视频网站| av一卡二卡| 欧美 日韩 国产 激情| 六月婷婷激情综合| 午夜精品一区二区三区四区| 亚洲综合色av| 亚洲精品女av网站| 国产精品吴梦梦| 日韩av片永久免费网站| 国产免费成人在线视频| 久久机这里只有精品| 亚洲一区二区伦理| 欧美久久九九| 亚洲精品成人无限看| 狠狠色狠狠色综合婷婷tag| 国产成人aa在线观看网站站| 国产成人免费精品| 日本一道高清亚洲日美韩| 亚洲天堂手机| 欧亚在线中文字幕免费| a'aaa级片在线观看| 午夜激情在线| 手机av在线播放| 久草在线新免费首页资源站| 成人日批视频| www国产在线观看| 欧美精品免费视频| 秋霞午夜鲁丝一区二区老狼| 亚洲二区精品| 亚洲女同同性videoxma| 亚洲一区二区三区四区五区午夜| 亚洲午夜一区| 久久久久免费| 天天射成人网| 亚洲婷婷免费| 青青草国产成人av片免费| 卡一卡二国产精品 | 99久久自偷自偷国产精品不卡|