[开发技巧]·安卓手机开发深度学习简易教程(基于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。。