中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解Android中快速遷移風格

發布時間:2021-10-18 16:00:43 來源:億速云 閱讀:132 作者:iii 欄目:移動開發

這篇文章主要講解了“如何理解Android中快速遷移風格”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何理解Android中快速遷移風格”吧!

效果

如何理解Android中快速遷移風格

如何理解Android中快速遷移風格

缺點

  • 1.沒有組件化

  • 2.沒有混淆

  • 3.有些地方抽象不夠

深度學習和神經網絡的基本概念

什么是深度學習

  • 1.AI--》機器學習--》深度學習,前面三個概念是遞進的,簡單來說深度學習是機器學習的一種,深度學習就是利用機器來學習很多數據,而機器學習又是實現AI的一種方式。

  • 2.在深度學習中有兩個重要的東西:數據和神經網絡。在深度學習中有兩個重要的過程:訓練和測試 1.數據和網絡: 1.數據:我們想象一個簡單的圖片分類場景,我們有10000張已經被人工分好類的圖片,每張圖片都有一個正確的分類,比如貓、狗等等。 2.網絡:這里的神經網絡我們可以想象成一個函數,我們的輸入是一張圖片,輸出則是這張圖片在每個分類下面的分數。也就是一個分數的數組。 2.訓練和測試: 1.訓練:在訓練的時候我們會將圖片集中的圖片一次次的輸入到神經網絡里面去,然后會一次次得到該圖片在每個分類下的分數,每當我們得出了一個分數數組之后我們可以計算當前的神經網絡損失值(當前的網絡準確率越高損失值越低),有了損失值,我們的目標就是降低損失值。了解導數的同學都知道我們可以通過求導損失值函數得到讓損失值降低的梯度方向,然后反饋到神經網絡中。就這樣一次次的循環,讓損失值降到最低。 2.測試:當我們將神經網絡訓練到了一個最佳的狀態,我們就可以將我們需要進行分類的圖片,輸入到神經網絡中,得到最終神經網絡對該圖片分類的結果。 3.總結:深度學習到底是怎么學習的呢?我們可以看見我們的訓練數據是經過人的處理的,那么深度學習的過程就是將人的處理過程固化到我們的神經網絡中,最終讓神經網絡來代替人工處理的過程。 4.上面只是介紹深度學習的基本流程,如果要更深入地了解可以看這篇博客

什么是神經網絡

我們在上一節中說到了,最終人處理數據的過程通過我們的訓練被固化到神經網絡中去了。下面我會簡單介紹一下前面說到的神經網絡

  • 1.還是在簡單的圖片分類場景: 1.我們假設圖片為x的大小為100 * 100(我們把圖片平鋪成為1 * 10000的矩陣),圖片一共有10個分類。 2.那么一個兩層的神經網絡就是這樣的:y = x * w1 * w2(w1為 10000 * a的矩陣,w2為a * 10的矩陣),這里最終y就是一張圖片在各個分類下的分數,式子中的乘法是矩陣乘法。 3.當然層數更多的神經網絡就是有更多的w,我們w1 和 w2中的a可以自己定義。

  • 2.解釋一下y = x * w1 * w2: 1.研究表明我們在看x這張圖片的時候,我們會先看圖片的輪廓,這里我們大腦中看圖片輪廓的神經元就相當于w1 2.看完輪廓之后我們會對這個圖片中的東西有基本感覺,判斷這張圖片屬于哪些類別,這里的類別就是x * w1的結果 3.2中的結果會被輸入大腦中下一層神經元,這里的神經元就相當于w2,經過w2之后我們就會輸出一個結果這里就是y。 4.當然人的神經元層數遠比上面說到的多

  • 3.訓練y = x * w1 * w2的過程以人做對比就相當于:我們有一堆圖片給一個啥也不懂的小孩看,剛開始他肯定輸出的結果都是錯的,但是我們只要每次糾正一下他的錯誤,那么他腦袋中的神經元(w)就會不斷的修改然后識別的準確率不斷提高。

Android中的Tensorflow

這一節將會介紹如何在Android中使用已經訓練好的神經網絡

開始

本篇文章中,我只會以一個demo為例子進行講解,前面提到的MyPhotoShop項目會另起一個專題進行剖析。

  • 1.demo地址:github地址(https://github.com/whenSunSet/TensorflowPureDemo)

  • 2.引入Tensorflow:compile 'org.tensorflow:tensorflow-android:+'

Tensorflow中的概念

  • 1.圖(graph):我們在前面講解了一個神經網絡是什么樣子的,在Tensorflow中神經網絡的每個神經元w都屬于圖中的一個節點,神經網絡全部的節點就構成了一個有向無環圖也就是Tensorflow的圖的一部分。當然Tensorflow的圖中除了神經網絡的節點外,還有其他輔助的操作:比如圖片解碼、圖片編碼、圖片預處理操作等等。我們舉一個圖的例子就是:圖片a--》解碼圖片產生b--》處理b產生圖片數據矩陣c(1 * 10000)--》c與w1(10000 * x)矩陣相乘產生d(1 * x)--》d與w2(x * 10)矩陣相乘產生e(1 * 10)--》選出e中值最大的分類,神經網絡就判斷圖片a是這種分類的圖片。

  • 2.節點(node):每個節點都是圖的一部分,每個節點有:入參、出參、具體操作函數(比如矩陣乘法)、可能有神經元值w。

  • 3.TensorFlowInferenceInterface:一個Tensorflow中訓練的上下文,在不同語言中名字不同。內部包含了一個訓練中需要的全部實例。

demo代碼講解

我們本次demo中只涉及Tensorflow在Android中神經網絡模型的使用,并不涉及訓練的過程。原因有兩個:1.移動端并不適合訓練神經網絡 2.Tensorflow for Android沒有訓練的API。

  • 1.我這次使用的神經網絡是已經訓練好的快速風格遷移網絡

  • 2.對于模型我們的輸入是:一張圖片轉化為的float類型的張量,大小為(1 * 800 * 600 * 3),輸入節點的名字是padsss:0,這里的名字是在訓練過程中定義的。

  • 3.對于這個模型我們的輸出是:大小為(1 * 780 * 680 * 3)的float類型張量。輸出節點的名字是squeezesss:0,名字也是在訓練過程中定義的。

android中的深度學習——快速風格遷移

  • 4.我們看代碼,先用RxPermission獲取了一下權限,獲取成功之后將assets中需要處理的圖片寫入到sd卡中一遍后面使用,進入make()方法

android中的深度學習——快速風格遷移

  • 5.將4中的圖片讀取到內存中

  • 6.以ARGB為例我們知道Bitmap中每個像素是以int十六進制儲存像素的,類似這種形式FFFFFFFF,那么每兩位就是一個通道的數值,上限是256。所以接下來就是將Bitmap中的像素值,轉化為float類型的數組,數組大小是(800 * 600 * 3)。

  • 7.創建了一個TensorFlowInferenceInterface對象,入參是AssetManager和模型文件,這里就表示將神經網絡在內存中建立起來

  • 8.輸出一下每個節點的名字

  • 9.向神經網絡中傳入輸入節點的名字、輸入節點的數據、數據張量的維度

  • 10.運行神經網絡,入參是輸出節點的名字

  • 11.神經網絡的運行是阻塞的,所以運行好了之后,就能獲取數據了,這里將數據存入(780 * 580 * 3)的float數組中。

  • 12.將float數組重新整合成Bitmap的像素值,然后寫入Bitmap中。

注意點

  • 1.demo運行的時候速度會比較慢,耐心等待一下

  • 2.我運行的設備是:小米mix2、Android8.0。其他設備可能會有問題,要么就是速度非常慢,還可能是cpu或者系統版本不支持。

感謝各位的閱讀,以上就是“如何理解Android中快速遷移風格”的內容了,經過本文的學習后,相信大家對如何理解Android中快速遷移風格這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

盖州市| 平邑县| 江陵县| 油尖旺区| 泸定县| 旬阳县| 华阴市| 江川县| 醴陵市| 铁岭市| 天峻县| 齐河县| 阳城县| 商河县| 乐亭县| 邹城市| 南皮县| 义马市| 塘沽区| 四平市| 鄂托克旗| 项城市| 浏阳市| 黔江区| 大埔区| 新民市| 循化| 漳浦县| 大渡口区| 奉节县| 治县。| 英山县| 临汾市| 西城区| 武鸣县| 武冈市| 盘山县| 林周县| 海口市| 双鸭山市| 武功县|