深度学习TensorFlow

简介: 深度学习TensorFlow

前言


对于程序员来说一种好的语言无疑是非常重要的,在深度学习中,就有一门语言:TensorFlow,集成了大量的深度学习常用函数,使得我们可以快速的部署模型,以及进行训练。所以,下面我们就开始了解以下TensorFlow中的各个函数的用法。


TensorFlow的起源


TensorFlow是一个基于数据编程的符号数学系统,被广泛用于割裂机器学习算法的编程实现,那么TensorFlow是谁构建的?它的前身是谷歌的DistBelief神经网络库。从2015年11月9日起,TensorFlow阿帕奇授权协议开放源代码。


据小道消息,我们现在用的TensorFlow只是一小部分,其真身还是在谷歌的内部,所以说,我们的和国外的差距还是很大的,需要各位读者努力学习,缩短差距。


TensorFlow基础知识


安装


python用户安装,只需要使用pip install tensorflow命令行即可.


如果需要GPU加速,则输入:


pip install tensorflow-gpu


安装完后,可以使用以下命令查看版本:


import tensorflow as tf
tf.__version__


图计算


对于深度学习框架,图计算是基础中的基础。前面讲了深度学习中的正向传播和反向传播,图计算就是将 深度学习中的正向传播和反向求导顺序构建成一张图,之后计算的时候只要更具图中的顺序更新参数即可。


图计算分为两大类:静态图和动态图。静态图就是先定义一整张图片,在进行计算,优点是再次运行的时候不需要重新构建计算图;而对于动态图,每次计算都会重建一个新的计算图,优点是随时可以解决缺陷(bug),不需要等到整张图构建完才可以解决bug。


TensorFlow应该使用哪一种?版本不同,使用的也不同,在版本1.x中,默认使用静态图,需要先创建图(graph),之后才能在会话中(session)进行计算,但是也可以通过快速执行(eager)模式,进行动态图计算。而在最新的2.x版本中,默认为动态图模式。


TensorFlow 2.0


相比之前的版本,2.0版本的TensorFlow具有了很多的优点:


(1)大量简化API。
(2)快速执行。
(3)不需要再创建会话。
(4)不再使用全局变量跟踪。
(5)统一保存模式。


TensorFlow的确是非常便于学习和使用的,让我们可以把更多的精力放在研究方向上。


张量


TensorFlow和PyTorch中的数据模型很多都是用张量的形式来存储,所谓张量,就是一个高维的矩阵。在TensorFlow中,使用tf.Tensor类表示张量,一个张量的参数有编号(id)、形状(shape=())、数据类型(dtype)、值(value)、所在计算图(graph)、张量名称(name)。


张量中最常用的就是常量和变量,常量用tf.constant,而变量用tf.Variable类,参数为名称(name)、形状(shape)、数据类型(dtype)、数值(value)。


张量的数据类型:


tf.float32    32 位浮点数
tf.float64    64 位浮点数
tf.int64    64 位有符号整型
tf.int32    32 位有符号整型
tf.int16    16 位有符号整型
tf.int8    8 位有符号整型
tf.uint8    8 位无符号整型
tf.string    可变长度的字节数组.每一个张量元素都是一个字节数组
tf.bool    布尔型
tf.complex64    由两个32位浮点数组成的复数:实数和虚数
tf.qint32    用于量化Ops的32位有符号整型
tf.qint8    用于量化Ops的8位有符号整型
tf.quint8    用于量化Ops的8位无符号整型


下面用代码来展示一下:


import tensorflow as tf
a=tf.constant(2,name='a')
b=tf.constant(3,name='b')
#计算a+b
x=tf.add(a,b)
print(x)
print(a+b)
#得到a的形状
a.get_shape()
#得到a的值
a.numpy()
#变量
s=tf.Variable(2,name='scaler')
n=tf.Variable([[0,1],[2,3]],name='matrix')
w=tf.Variable(tf.zeros([784,10]))
#将变量s赋值为3
s.assign(3)
#将变量的值加3
s.assign_add(3)
s.numpy()


tf.Tensor(5, shape=(), dtype=int32) tf.Tensor(5, shape=(), dtype=int32)
6


tf.data


在构建数据流的时候,我们可以创建数据集,创建数据集的作用就是提高速度,效率,那么为什么会有如此的作用喃?


其实就是将CPU的空闲时间缩短了,转为GPU空闲,利用率大幅上升。


import tensorflow as tf
a=tf.constant(2,name='a')
b=tf.constant(3,name='b')
#计算a+b
x=tf.add(a,b)
print(x)
print(a+b)
#得到a的形状
a.get_shape()
#得到a的值
a.numpy()
#变量
s=tf.Variable(2,name='scaler')
n=tf.Variable([[0,1],[2,3]],name='matrix')
w=tf.Variable(tf.zeros([784,10]))
#将变量s赋值为3
s.assign(3)
#将变量的值加3
s.assign_add(3)
s.numpy()
'''
#创建数据集方法(3种)
tf.data.Dataset.from_tensors((features,labels))
tf.data.Dataset.from_tensor_slices((freatures,labels))
tf.data.Dataset.from_generator(gen,output_types,output_shapes)
'''
#创建数据集方法的区别
dataset=tf.data.Dataset.from_tensors([1,2,3,4,5])
for element in dataset:
    print(element.numpy())
it=iter(dataset)
print(next(it).numpy())
dataset=tf.data.Dataset.from_tensor_slices([1,2,3,4,5])
for element in dataset:
    print(element.numpy())
it=iter(dataset)
print(next(it).numpy())
#读取数据集
#包含多个txt文件的行
tf.data.TextLineDataset(filename) #filename代表的是路径
#来自一个或多个二进制文件的固定长度记录的数据集
tf.data.FixedLengthRecordDataset(filename)
#包含多个TFRecord文件的记录
tf.data.TFRecordDataset(filename)
#合并数据集
features=tf.data.Dataset.from_tensors([1,2,3,4,5])
labels=tf.data.Dataset.from_tensor_slices([6,7,8,9,10])
dataset=tf.data.Dataset.zip((features,labels))
for element in dataset:
    print(element)
#对数据取batch,注意batch(4)不是指取4个数据,而是将数据集中的数据打包为4个一组
inc_dataset=tf.data.Dataset.range(100)
dec_dataset=tf.data.Dataset.range(0,-100,-1)
dataset=tf.data.Dataset.zip((inc_dataset,dec_dataset))
batched_dataset=dataset.batch(4)
#读取数据集
for batch in batched_dataset.take(4):
    print([arr.numpy() for arr in batch])
#对数据集进行随机打乱
shuffle_dataset=dataset.shuffle(buffer_size=10)
for element in shuffle_dataset:
    print(element)
#使用常用的数据
tf.keras.datasets.xx.load_data()


模型存取


在TensorFlow种有两种保存模型的方式,第一种是只保存模型的权重,我们也称之为保存为检查点(checkpoint),使用函数model.save_weights('checkpoint'),由于只保存了权重,在读取模型的时候,我们必须重新搭建模型,之后使用model.restore(ckpt)即可。


第二种是保存整个模型,使用model.save('my_model.h5'),读取的时候就不需要重新搭建模型了,直接使用model=load_model('my_model.h5')。


Keras接口


为了方便我们进行函数的使用,TensorFlow中给出了一个接口,这个接口中包含了很多的函数,我们直接使用这个接口就可以了。下面来介绍介绍这个接口的神奇之处。


一、全连接层:tf.keras.layers.Dense,此函数的参数为神经元数量units,激活函数activation、是否使用偏置参数use_bias,初始化参数initialializer、正则化参数regularizer。
二、卷积层:tf.keras.layers.Conv1D、2D、3D,共三种不同维度的卷积层,分别对应输入为词向量、图片和视频。此函数的参数为卷积核数量filters、卷积尺寸核kernel_size、滑动步长strides、填充方式padding、激活函数activation、是否使用偏置参数use_bias初始化参数initializer、正则化参数regularizer。
三、池化层:池化层非常多,分为平均池化层tf.keras.layers.AveragePooling2D()、最大池化层tf.keras.layers.MaxPool2D()、全局平均池化层tf.keras.layers.GlobalAveragePooling2D()和全局最大池化层tf.keras.layers.GlobalMaxPool2D。所谓全局池化层,就是对某一维度进行平均,例如输入为28x28的图片,输出为28x1的向量。函数的参数为池化大小为pool_size、滑动步长strides、填充方式padding。
Dropout层:tf.keras.layers.Dropout
BatchNorm层:tf.keras.layers.BatchNormalization
RNN单元:tf.keras.layers.RNN
LSTM单元:tf.keras.layers.LSTM
GRU单元:tf.keras.layers.GRU
最后,常用的优化器:tf.keras.optimizers.Adagrad、Adagrad、tf.keras.optimizers.Adam,以及tf.keras.optimizers.SGD。


神经网络搭建


model=tf.keras.Sequential([
    tf.keras.layers.Flatten(input_shape=(28,28)),
    tf.keras.layers.Dense(128,activation='relu',bias=False,trainable=False),
    tf.keras.layers.Dense(10,activation='softmax')
])
#卷积神经网络
model1=tf.keras.Sequential()
model1.add(tf.keras.layers.Conv2D(32,(3,3),activation='relu',input_shape=(28,28,1)))
model1.add(tf.keras.layers.MaxPooling2D((2,2)))
model1.add(tf.keras.layers.Conv2D(64,(3,3),activation='relu',input_shape=(28,28,1)))
model1.add(tf.keras.layers.MaxPooling2D((2,2)))
model1.add(tf.keras.layers.Conv2D(64,(3,3),activation='relu',input_shape=(28,28,1)))
model1.add(tf.keras.layers.Flatten())
model1.add(tf.keras.layers.Dense(256,activation='relu'))
model1.add(tf.keras.layers.Dense(10,activation='softmax'))
#RNN网络
model2=tf.keras.Sequential()
model2.add(tf.keras.layers.LSTM(128,input_shape=(None,28)))
model2.add(tf.keras.layers.Dense(10,activation='softmax'))


代码实战:手写数字


import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
#读取模型
fashion_mnist=tf.keras.datasets.fashion_mnist
(train_images,train_labels),(test_images,test_labels)=fashion_mnist.load_data()  #下载数据模型
#获得图片大小
train_images.shape
#打印图例
def plotImages(images_arr):
    fig,axes=plt.subplots(1,5,figsize=(10,10))
    axes=axes.flatten()
    for img,ax in zip(images_arr,axes):
        ax.imshow(img)
        ax.axis('off')
    plt.tight_layout()
    plt.show()
plotImages(train_images[:5])
#归一化
train_images=train_images/255.0
test_images=test_images/255.0
#全连接层模型
model=tf.keras.Sequential([
    tf.keras.layers.Flatten(input_shape=(28,28)),
    tf.keras.layers.Dense(128,activation='relu',trainable=False),
    tf.keras.layers.Dense(10,activation='softmax')
])
#模型总结
model.summary()
#编译
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',metrics=['accuracy'])
#训练
model.fit(train_images,train_labels,epochs=10,validation_data=(test_images,test_labels))
#模型权重
model.variables
#保存权重
model.save_weights('./fashion_mnist/my_checkpoint')
#恢复权重
model.load_weights('./fashion_mnist/my_checkpoint')
#预测
loss,acc=model.evaluate(test_images,test_labels,verbose=2)
print('Restored model,accuracy:{:5.2f}%'.format(100*acc))
#保存整个模型
model.save('my_model.h5')
new_model=tf.keras.models.load_model('my_model.h5')
loss,acc=new_model.evaluate(test_images,test_labels,verbose=2)
print('Restored model,accuracy:{:5.2f}%'.format(100*acc))
#在文件中名中包含epoch(使用'str.format')
checkpoint_path='fashion_mnist_1/cp-{epoch:04d}.ckpt'
#创建一个回调,每个epoch保存模型的权重
cp_callback=tf.keras.callbacks.ModelCheckpoint(
    filepath=checkpoint_path,
    save_weights_only=True,
    period=1
)
#使用checkpoint_path格式保存权重
model.save_weights(checkpoint_path.format(epoch=0))
#实用新的回调训练模型
model.fit(train_images,
          train_labels,epochs=5,
          callbacks=[cp_callback],
          validation_data=(test_images,test_labels))


074424a3c6a6ad468837c18d97d65cfc_e4ec63095d304854bcc9e0330b069d66.png


这就是训练成功的数据集。好了,本节内容就到此结束了,拜拜了你嘞!

相关文章
|
16天前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
60 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
15天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
44 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
23天前
|
机器学习/深度学习 供应链 TensorFlow
深度学习实战营:TensorFlow+Python,打造你的数据驱动决策引擎
【9月更文挑战第13天】在数据爆炸时代,企业日益依赖精准分析进行决策。深度学习凭借其卓越的特征提取与模式识别能力,成为构建数据驱动决策引擎的关键技术。本项目通过TensorFlow和Python,利用LSTM构建零售业销量预测模型,优化库存管理和营销策略。首先确保安装TensorFlow,然后使用Keras API搭建模型,并通过训练、评估和部署流程,展示深度学习在数据驱动决策中的强大应用潜力,助力企业提升经营效率。
32 3
|
2月前
|
机器学习/深度学习 算法 TensorFlow
深入探索强化学习与深度学习的融合:使用TensorFlow框架实现深度Q网络算法及高效调试技巧
【8月更文挑战第31天】强化学习是机器学习的重要分支,尤其在深度学习的推动下,能够解决更为复杂的问题。深度Q网络(DQN)结合了深度学习与强化学习的优势,通过神经网络逼近动作价值函数,在多种任务中表现出色。本文探讨了使用TensorFlow实现DQN算法的方法及其调试技巧。DQN通过神经网络学习不同状态下采取动作的预期回报Q(s,a),处理高维状态空间。
40 1
|
17天前
|
机器学习/深度学习 数据挖掘 TensorFlow
解锁Python数据分析新技能,TensorFlow&PyTorch双引擎驱动深度学习实战盛宴
在数据驱动时代,Python凭借简洁的语法和强大的库支持,成为数据分析与机器学习的首选语言。Pandas和NumPy是Python数据分析的基础,前者提供高效的数据处理工具,后者则支持科学计算。TensorFlow与PyTorch作为深度学习领域的两大框架,助力数据科学家构建复杂神经网络,挖掘数据深层价值。通过Python打下的坚实基础,结合TensorFlow和PyTorch的强大功能,我们能在数据科学领域探索无限可能,解决复杂问题并推动科研进步。
38 0
|
26天前
|
机器学习/深度学习 数据挖掘 TensorFlow
从数据小白到AI专家:Python数据分析与TensorFlow/PyTorch深度学习的蜕变之路
【9月更文挑战第10天】从数据新手成长为AI专家,需先掌握Python基础语法,并学会使用NumPy和Pandas进行数据分析。接着,通过Matplotlib和Seaborn实现数据可视化,最后利用TensorFlow或PyTorch探索深度学习。这一过程涉及从数据清洗、可视化到构建神经网络的多个步骤,每一步都需不断实践与学习。借助Python的强大功能及各类库的支持,你能逐步解锁数据的深层价值。
46 0
|
2月前
|
持续交付 测试技术 jenkins
JSF 邂逅持续集成,紧跟技术热点潮流,开启高效开发之旅,引发开发者强烈情感共鸣
【8月更文挑战第31天】在快速发展的软件开发领域,JavaServer Faces(JSF)这一强大的Java Web应用框架与持续集成(CI)结合,可显著提升开发效率及软件质量。持续集成通过频繁的代码集成及自动化构建测试,实现快速反馈、高质量代码、加强团队协作及简化部署流程。以Jenkins为例,配合Maven或Gradle,可轻松搭建JSF项目的CI环境,通过JUnit和Selenium编写自动化测试,确保每次构建的稳定性和正确性。
44 0
|
2月前
|
测试技术 数据库
探索JSF单元测试秘籍!如何让您的应用更稳固、更高效?揭秘成功背后的测试之道!
【8月更文挑战第31天】在 JavaServer Faces(JSF)应用开发中,确保代码质量和可维护性至关重要。本文详细介绍了如何通过单元测试实现这一目标。首先,阐述了单元测试的重要性及其对应用稳定性的影响;其次,提出了提高 JSF 应用可测试性的设计建议,如避免直接访问外部资源和使用依赖注入;最后,通过一个具体的 `UserBean` 示例,展示了如何利用 JUnit 和 Mockito 框架编写有效的单元测试。通过这些方法,不仅能够确保代码质量,还能提高开发效率和降低维护成本。
44 0
|
2月前
|
UED 开发者
哇塞!Uno Platform 数据绑定超全技巧大揭秘!从基础绑定到高级转换,优化性能让你的开发如虎添翼
【8月更文挑战第31天】在开发过程中,数据绑定是连接数据模型与用户界面的关键环节,可实现数据自动更新。Uno Platform 提供了简洁高效的数据绑定方式,使属性变化时 UI 自动同步更新。通过示例展示了基本绑定方法及使用 `Converter` 转换数据的高级技巧,如将年龄转换为格式化字符串。此外,还可利用 `BindingMode.OneTime` 提升性能。掌握这些技巧能显著提高开发效率并优化用户体验。
44 0
|
2月前
|
Apache 开发者 Java
Apache Wicket揭秘:如何巧妙利用模型与表单机制,实现Web应用高效开发?
【8月更文挑战第31天】本文深入探讨了Apache Wicket的模型与表单处理机制。Wicket作为一个组件化的Java Web框架,提供了多种模型实现,如CompoundPropertyModel等,充当组件与数据间的桥梁。文章通过示例介绍了模型创建及使用方法,并详细讲解了表单组件、提交处理及验证机制,帮助开发者更好地理解如何利用Wicket构建高效、易维护的Web应用程序。
28 0

热门文章

最新文章

下一篇
无影云桌面