TensorFlow Lite 入门

TensorFlow

一、TensorFlow简介

Tensor(张量)Flow(流) 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。它灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU),服务器,移动设备等等。TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。

数据流图(Data Flow Graph)用“结点”(nodes)和“线”(edges)的有向图来描述数学计算。“节点” 一般用来表示施加的数学操作,但也可以表示数据输入(feed in)的起点/输出(push out)的终点,或者是读取/写入持久变量(persistent variable)的终点。“线”表示“节点”之间的输入/输出关系。这些数据“线”可以输运“size可动态调整”的多维数据数组,即“张量”(tensor)。张量从图中流过的直观图像是这个工具取名为“Tensorflow”的原因。一旦输入端的所有张量准备好,节点将被分配到各种计算设备完成异步并行地执行运算。

在这里插入图片描述

二、Windows安装

1.安装Anaconda

Anaconda Navigator是Anaconda发行包中包含的桌面图形界面,可以用来方便地启动应用、方便的管理conda包、环境和频道,不需要使用命令行的命令。

  • 下载链接: https://www.anaconda.com/download/
  • 设置环境变量:
    – 安装时勾上(默认没有勾的)
    – 或者在环境变量里配
  • 验证是否安装成功:
    进入到windows中的命令模式(快捷键win+R,输入cmd):
conda --version

在这里插入图片描述
conda : 最流行的 Python 环境管理工具

2.安装python版本环境

conda create --name tensorflow python=3.5

命令说明:

tensorflow :创建一个名字为“tensorflow”的Python版本环境
python=3.5:指定Python版本是3.5

python版本很重要
不同版本的Tensorflow对python版本有兼容性问题,用Spyder亲测过 tensorflow1.2.1 python3.5.2 和 tensorflow2.2.0 python 3.7.7

3.激活tensflow的环境

activate tensorflow

说明:
激活名字为:“tensorflow” 的Python版本环境,不然后面写python时,会提示找不到TensorFlow模块。

  • 退出tensorflow的环境命令:deactivate

4.安装TensorFlow

pip install --upgrade --ignore-installed tensorflow

默认安装符合你硬件条件的最新版tensorflow,如果下载中断了,反复连不上,或者要安装特定的版本,可以试试阿里服务器的包: http://mirrors.aliyun.com/pypi/simple/tensorflow/
下载下来,然后离线安装:

pip install --upgrade --ignore-installed 路径(下载到本地的文件路径)

pip是用于安装和管理软件包的包管理器

5.验证TensorFlow是否安装成功

5.1 在Anaconda Prompt里打开命令行:

Anaconda Prompt

5.2 切换到之前创建的名字为“tensorflow” 的Python版本环境
activate tensorflow
5.3 进入python编辑环境
python
5.4 验证tensorflow是否安装成功
import tensorflow as tf

测试一下导入tensorflow,如果没有报错就说明安装成功了,测试了两个版本:

  • tensorflow 1.2.1 搭配 python 3.5.2
    在这里插入图片描述
    在这里插入图片描述
  • tensorflow 2.2.0 搭配 python 3.7.7
    在这里插入图片描述
    在这里插入图片描述
  • 查看tensorflow版本命令:pip list
  • 返回上一级的命令:exit()

一定要在对应的python环境下进行安装、跑代码等等,系统默认启动后,不是之前创建的python环境,需要切换到之前创建的名字为“tensorflow” 的Python版本环境:activate tensorflow,不然后面跑代码时,不同python的版本对不同包的支持不同,经常出现找不到包的情况。

三、在Spyder开发测试

这次测试用了Spyder开发环境,也可以用Jupyter或者PyCharm,在Anaconda里直接安装,不同版本的python环境安装不同版本的Spyder版本。
在这里插入图片描述
简介:
Spyder是Python(x,y)的作者为它开发的一个简单的集成开发环境。和其他的Python开发环境相比,它最大的优点就是模仿MATLAB的“工作空间”的功能,可以很方便地观察和修改数组的值。

这次用tensorflow测试了4个程序,v1.2.1和v2.2.0 的都跑过,代码不能通用,主要是因为v2.0后改动了很多,主要是对库的引用,需要导入就的包,例如:Session等。下面用v2.2.0的版本介绍一下(基于v1.0版本的改动一下就行了):

1.HelloWorld

import tensorflow.compat.v1 as tf

hello = tf.constant('Hello,F\'s TensorFlow!')
print(tf.Session().run(hello))

如果是v1.0,直接是

import tensorflow as tf

2.记录设备指派情况 Log Device Placement

import tensorflow.compat.v1 as tf

a = tf.constant([1.0,2.0,3.0],shape=[3],name='a')
b = tf.constant([1.0,2.0,3.0],shape=[3],name='b')
c = a + b

gpu_options =tf.GPUOptions(allow_growth=True,
                           per_process_gpu_memory_fraction=0.8)#per_process_gpu_memory_fraction=0.8,每个gpu占用0.8的显存
config=tf.ConfigProto(gpu_options=gpu_options,
                      allow_soft_placement=True,#注意:allow_soft_placement=True表明:计算设备可自行选择,如果没有这个参数,会报错。因为不是所有的操作都可以被放在GPU上,如果强行将无法放在GPU上的操作指定到GPU上,将会报错。
                      log_device_placement=True)#可以获取到 operations 和 Tensor 被指派到哪个设备(几号CPU或几号GPU)上运行
sess=tf.Session(config=config)

print(sess.run(c))
  • 设置tf.ConfigProto()中参数log_device_placement = True ,可以获取到 operations 和 Tensor 被指派到哪个设备(几号CPU或几号GPU)上运行,会在终端打印出各项操作是在哪个设备上运行的。
    在这里插入图片描述

3.MNIST Keras 显示数据

import tensorflow.compat.v1 as tf
import matplotlib.pyplot as plt
import random

mnint=tf.keras.datasets.mnist
(x_,y_),(x_1,y_1)=mnint.load_data()

#keras的容量是60000
random_num = random.randint(0,59999)

plt.imshow(x_[random_num], cmap="binary")
plt.show()

print(tf.Session().run(tf.constant('random number is : '+str(random_num))))
  • 注意:
    如果出现错误:
    RuntimeError: The Session graph is empty. Add operations to the graph before calling run().
    需要先跑一下:
    tf.disable_eager_execution()
    跑一次之后可以注释掉。
    因为这个例子使用了keras,由于keras本身的会全部占用gpu显存,因此引入了如下限制机制。
    限制显存的session由于没有清理,会与模型预测部分的对话发生混淆,致使开始的会话影响到了后面,并且跑其他程序时,会话也会使用同一个默认的空图,导致错误出现,跑一下Disable动态图机制就可以了。

  • Keras是用Python编写的高级神经网络API,能够在TensorFlow,CNTK或Theano之上运行。它的开发着眼于实现快速实验。能够以最小的延迟将想法付诸实践是进行良好研究的关键。入门了解好地方:https://keras-cn.readthedocs.io/en/latest/for_beginners/concepts/

  • MNIST是入门级别的手写体数字识别数据集,它包含了60000张图片作为训练数据,10000张图片作为测试数据。

4.MNIST Keras 训练

from __future__ import print_function
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as K

batch_size = 128
num_classes = 10
epochs = 12

# input image dimensions
img_rows, img_cols = 28, 28

# the data, split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()

if K.image_data_format() == 'channels_first':
    x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
    x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
    input_shape = (1, img_rows, img_cols)
else:
    x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
    x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
    input_shape = (img_rows, img_cols, 1)

x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')

# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))

model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])

model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          validation_data=(x_test, y_test))

score = model.evaluate(x_test, y_test, verbose=0)
    
print('Test loss:', score[0])
print('Test accuracy:', score[1])

5.MNIST tutorials数据包

import tensorflow.compat.v1 as tf

from tensorflow.examples.tutorials.mnist import input_data

#/WorkSpace/MNIST_data/为数据存放路径,如果网络连不了可以离线下载下来放进去
mnist = input_data.read_data_sets("/WorkSpace/MNIST_data/", one_hot=True)

#输入图像数据占位符
x = tf.placeholder(tf.float32, [None, 784])

#权值和偏差
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

#使用softmax模型
y = tf.nn.softmax(tf.matmul(x, W) + b)

#代价函数占位符
y_ = tf.placeholder(tf.float32, [None, 10])

#交叉熵评估代价
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))

#使用梯度下降算法优化:学习速率为0.5
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

#Session
sess = tf.InteractiveSession()

#初始化变量
tf.global_variables_initializer().run()

#训练模型,训练1000次
for _ in range(1000):
 batch_xs, batch_ys = mnist.train.next_batch(100)
 sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

#计算正确率
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))

accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))

print ("Tranining data size: ", mnist.train.num_examples)
  • 这个例子需要tutorials里的数据集,如果提示找不到tensorflow.examples.tutorials,到GitHub上把tensorflow整个Clone下来,然后把里面的tutorials文件夹放到对应python环境的路径下\Lib\site-packages\tensorflow\examples\即可。
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值