1. 程式人生 > >使用安卓手機開發深度學習簡易教程(Python3+Keras)

使用安卓手機開發深度學習簡易教程(Python3+Keras)

本教程基於安卓手機平臺,在PyDroid3軟體上,使用Python3語言配合Keras框架開發深度學習。本文章主要涉及在手機上開發環境的搭建,以及簡單的示例程式碼,如果想深入研究開發,還需要讀者自己花些功夫了。不廢話,開始教程。。

  • 準備工作
    1、手上需要有一個安卓手機,最近兩年釋出的機型都可以,效能不要太弱,因為跑深度學習程式碼還是很吃效能的。我用的是小米8,跑cnn長時間會發熱。
    2、下載PyDroid3手機APP,我給大家準備好連結了
    PyDroid3下載地址
    3、手機需要聯網,並且至少應該有1G儲存,因為要下載一些依賴包。

  • 軟體安裝
    1、安裝下載好的PyDroid,為了方便演示,我從手機上解除安裝APP,把整個流程走一下。
    2、安裝好PyDroid後,開啟APP,會自動安裝Python3,稍等一下,就可以測試python是否正常工作。
    3、測試python功能
    在這裡插入圖片描述

在中間輸入框輸入測試程式碼:

print("Hello World")

注意括號()和雙引號""要使用英文輸入法下面標點符號來輸入,不然會報錯,以後再手機上Code的時候也要注意這點。
輸入程式碼完成後,點選右下角的黃色按鈕就可以執行,如果無誤的話會有
Hello World
的輸出
在這裡插入圖片描述
在這裡插入圖片描述

  • 開發環境搭建
    1、依賴庫安裝
    點選右上角會顯示更多選單,選擇Pip選項,可以在QUICK INSTALL找到常用的庫,點選INSTALL就可以安裝了,安裝的時候要稍等一下(速度的確比較慢,大家需要耐心等待下),等提示安裝完成時再退出介面。
    首先可以先安裝常用的包:
    numpy,pandas,cython,scipy。

在這裡插入圖片描述2、keras環境安裝
細心的同學可以發現其實在上面介面就可以安裝Keras了,但是因為Keras需要Theano作為後端(就是需要Theano才能正常執行),所以我們需要先安裝Theano,可以在INSTALL 下面輸入框輸入
theano
然後APP就會自己搜尋下載(注意不要輸入錯了,可能會找不到包),同樣的等一下,安裝完成後再退出介面,如果
提示錯誤,可能是網路原因,那就等一下再輸入一次進行安裝。(建議有些基礎的可以選擇命令列,在軟體上很容易找到,和Linux,系統用法基本一致)

在上面選單選項選擇Terminal 選項,進入Terminal
依次輸入:完成一項再輸入下一項

pip3 install --upgrade pip
pip3 install theano
pip3 install keras

安裝完成後就可以測試keras功能了,開始深度學習了。

  • 測試程式碼

# coding: utf-8
import numpy as np
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense, Activation, Convolution2D, MaxPooling2D, Flatten
from keras.optimizers import Adam
np.random.seed(1337)
 
# download the mnist
(X_train, Y_train), (X_test, Y_test) = mnist.load_data()
 
# data pre-processing
X_train = X_train.reshape(-1, 1, 28, 28)/255
X_test = X_test.reshape(-1, 1, 28, 28)/255
Y_train = np_utils.to_categorical(Y_train, num_classes=10)
Y_test = np_utils.to_categorical(Y_test, num_classes=10)
 
# build CNN
model = Sequential()
 
# conv layer 1 output shape(32, 28, 28)
model.add(Convolution2D(filters=32,
                       kernel_size=5,
                       strides=1,
                       padding='same',
                       batch_input_shape=(None, 1, 28, 28),
                       data_format='channels_first'))
model.add(Activation('relu'))
 
# pooling layer1 (max pooling) output shape(32, 14, 14)
model.add(MaxPooling2D(pool_size=2, 
                       strides=2, 
                       padding='same', 
                       data_format='channels_first'))
 
# conv layer 2 output shape (64, 14, 14)
model.add(Convolution2D(64, 5, 
                        strides=1, 
                        padding='same', 
                        data_format='channels_first'))
model.add(Activation('relu'))
 
# pooling layer 2 (max pooling) output shape (64, 7, 7)
model.add(MaxPooling2D(2, 2, 'same', 
                       data_format='channels_first'))
 
# full connected layer 1 input shape (64*7*7=3136), output shape (1024)
model.add(Flatten())
model.add(Dense(1024))
model.add(Activation('relu'))
 
# full connected layer 2 to shape (10) for 10 classes
model.add(Dense(10))
model.add(Activation('softmax'))
model.summary()
# define optimizer
adam = Adam(lr=1e-4)
model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=['accuracy'])
 
# training
print ('Training')
model.fit(X_train, Y_train, epochs=1, batch_size=16)
 
# testing
print ('Testing')
loss, accuracy = model.evaluate(X_test, Y_test)
print ('loss, accuracy: ', (loss, accuracy))

在這裡插入圖片描述
在這裡插入圖片描述
需要去忙些事情了,教程後面的些東西晚些時間再更新。
感興趣的朋友大家一起努力。
未完待續,大家晚安,謝謝觀看。。