[開發技巧]·安卓手機開發深度學習簡易教程(基於Keras)

 

[開發技巧]·安卓手機開發深度學習簡易教程(基於Keras)

我的主頁–> http://www.yansongsong.cnpython

本教程基於安卓手機平臺,在PyDroid3軟件上,使用Python3語言配合Keras框架開發深度學習。本文章主要涉及在手機上開發環境的搭建,以及簡單的示例代碼,若是想深刻研究開發,還須要讀者本身花些功夫了。不廢話,開始教程。。後端

- 準備工做

一、手上須要有一個安卓手機,最近兩年發佈的機型均可以,性能不要太弱,由於跑深度學習代碼仍是很吃性能的。我用的是小米8,跑cnn長時間會發熱。
二、下載PyDroid3手機APP,我給你們準備好連接了
PyDroid3下載地址
三、手機須要聯網,而且至少應該有1G存儲,由於要下載一些依賴包。markdown

- 軟件安裝

一、安裝下載好的PyDroid,爲了方便演示,我從手機上卸載APP,把整個流程走一下。
二、安裝好PyDroid後,打開APP,會自動安裝Python3,稍等一下,就能夠測試python是否正常工做。
三、測試python功能
在這裏插入圖片描述網絡

在中間輸入框輸入測試代碼:框架

print("Hello World")

 

注意括號()和雙引號""要使用英文輸入法下面標點符號來輸入,否則會報錯,之後再手機上Code的時候也要注意這點。
輸入代碼完成後,點擊右下角的黃色按鈕就能夠運行,若是無誤的話會有
Hello World
的輸出
在這裏插入圖片描述
在這裏插入圖片描述dom

- 開發環境搭建

一、依賴庫安裝
點擊右上角會顯示更多菜單,選擇Pip選項,能夠在QUICK INSTALL找到經常使用的庫,點擊INSTALL就能夠安裝了,安裝的時候要稍等一下(速度的確比較慢,你們須要耐心等待下),等提示安裝完成時再退出界面。
首先能夠先安裝經常使用的包:
numpy,pandas,cython,scipy。ide

在這裏插入圖片描述二、keras環境安裝
細心的同窗能夠發現其實在上面界面就能夠安裝Keras了,可是由於Keras須要Theano做爲後端(就是須要Theano才能正常運行),因此咱們須要先安裝Theano,能夠在INSTALL 下面輸入框輸入
theano
而後APP就會本身搜索下載(注意不要輸入錯了,可能會找不到包),一樣的等一下,安裝完成後再退出界面,若是
提示錯誤,多是網絡緣由,那就等一下再輸入一次進行安裝。(建議有些基礎的能夠選擇命令行,在軟件上很容易找到,和Linux,系統用法基本一致)post

在上面菜單選項選擇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))

在這裏插入圖片描述

在這裏插入圖片描述Hope this helpsEnjoy Yourself。。

相關文章
相關標籤/搜索