人工智能|备战Tensorflow技能认证之两种快速构建模型的常用方式

简介: 人工智能|备战Tensorflow技能认证之两种快速构建模型的常用方式

1 前言

Tensorflow认证考试内容五项中的第一项是基础/简单模型,第二项是学习数据集模型。小编猜想,这两者都是比较基础的知识,涉及到的知识应该主要包含:全连接神经网络搭建简单模型,数据集的加载,以及根据数据集搭建全连接神经网络模型进行训练(也有可能会涉及到卷积)

在基础的内容肯定不能浪费太多时间,所以本文向读者们推荐两种能够快速搭建模型的方式,并辅以数据集的加载和简单的卷积层。

这两种方式能帮助快速地搭建模型,但并不意为这两者方式不能搭建复杂的模型,本文将以典型案例手写数字识别为例,来看看如何运用tf.keras.SequentialKeras Functional API,这两种方式来快速搭建模型。

2 数据加载及预处理

import tensorflow as tf

from tensorflow.keras import datasets,Sequential,layers,optimizers,models

 

def data_preprocess(x,y):

    #mnist的数据类型是unit8,需要转换为float32,并将像素点的值从0~255更换为-1~1

    x=2*tf.cast(x,dtype=tf.float32)/255.-1

    #真实值已经采用one_hot编码,直接转换为整型即可

    y=tf.cast(y,dtype=tf.int32)

    return x,y

 

#加载mnist手写字体数据集

(x,y),(x_val,y_val)=datasets.mnist.load_data()

#真实值进行one_hot编码

y=tf.one_hot(y,depth=10)

y_val = tf.one_hot(y_val, depth=10)

#维度变换

x=tf.reshape(x,[-1,28,28,1])

x = tf.reshape(x, [-1, 28, 28, 1])

x_val = tf.reshape(x_val, [-1, 28, 28, 1])

#构建训练数据集train_db

train_db=tf.data.Dataset.from_tensor_slices((x,y))

train_db=train_db.map(data_preprocess).shuffle(10000).batch(128)

#构建测试数据集test_db

test_db=tf.data.Dataset.from_tensor_slices((x_val,y_val))

test_db=test_db.map(data_preprocess).batch(128)

3 tf.keras.Sequential容器搭建

tf.keras.Sequential,可视作一个容器,只需要通过add函数往里面填入所需的神经层,便能快速地构建神经网络模型。

#创建Sequential容器

model=Sequential()

#加入池化层

model.add(layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'))

#加入卷积层

model.add(layers.Conv2D(64,kernel_size=[2,2],padding='same',activation=tf.nn.relu))

model.add(layers.MaxPool2D(pool_size=[2,2],strides=2,padding='same'))

model.add(layers.Conv2D(128, kernel_size=[2, 2], padding='same', activation=tf.nn.relu))

model.add(layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'))

model.add(layers.Conv2D(256, kernel_size=[2, 2], padding='same', activation=tf.nn.relu))

model.add(layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'))

#矩阵打平

model.add(layers.Flatten())

#加入全连接层

model.add(layers.Dense(128, activation=tf.nn.relu))

model.add(layers.Dense(10))

#建立模型,并指明输入的维度及其形状

model.build(input_shape=[None,28,28,1])

也可以选择在创建容器时,就加入所需要的神经层,两种方式并无太大差别。

model=Sequential([

        #池化层,卷积层各三层,最后打平再加上两层全连接

        layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'),

        layers.Conv2D(64,kernel_size=[2,2],padding='same',activation=tf.nn.relu),

        layers.MaxPool2D(pool_size=[2,2],strides=2,padding='same'),

        layers.Conv2D(128, kernel_size=[2, 2], padding='same', activation=tf.nn.relu),

        layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'),

        layers.Conv2D(256, kernel_size=[2, 2], padding='same', activation=tf.nn.relu),

        layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'),

        layers.Flatten(),

        layers.Dense(128, activation=tf.nn.relu),

        layers.Dense(10)

])

#建立模型,并指明输入的维度及其形状

model.build(input_shape=[None,28,28,1])

4 Sequential模型训练

本文提到的两种方式,在模型的训练上都可以直接调用model.compile进行模型训练配置和model.fit进行训练。

#训练模型的必要配置

model.compile(  #优化器选择及lr的数值

                optimizer=optimizers.Adam(lr=1e-3), 

               #损失函数选择,均分误差,交叉熵等

                loss=tf.losses.CategoricalCrossentropy(from_logits=True),                #用于监控训练,并呈现精确度

                metrics=['accuracy']

                  )

#模型训练,从左往右的参数分别是:训练数据集,训练次数,测试数据集,训练多少次便测试一次

model.fit(train_db,epochs=6,validation_data=test_db,validation_freq=2)

tf.keras.Sequential来搭建模型,简单快速。但缺陷也很明显,框架已定,灵活性太低,无法解决多输入/输出的问题,比如验证码识别:假设一张图内有4个数字,在不对图片进行切割等预处理的情况下,无法通过 Sequential来输出4个结果。

5 Keras Functional API

Functional API即保证了搭建模型的简单快捷,也具有很好的灵活性和可扩充性,无论是单输入/输出还是多/输入输出都能实现。

数据预处理和训练部分都与Sequential相同,那就直接来看看如何用Functional API搭建模型吧。

#定义输入层,并限制其shape

inputs=tf.keras.Input(shape=[28,28,1])

#定义不同神经层,并且每一层的输入都来自于上一层

x=layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same')(inputs)

x=layers.Conv2D(64,kernel_size=[2,2],padding='same',activation=tf.nn.relu)(x)

x=layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same')(x)

x=layers.Conv2D(128,kernel_size=[2,2],padding='same',activation=tf.nn.relu)(x)

x=layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same')(x)

x=layers.Conv2D(256,kernel_size=[2,2],padding='same',activation=tf.nn.relu)(x)

x=layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same')(x)

x=layers.Flatten()(x)

x=layers.Dense(128, activation=tf.nn.relu)(x)

#定义输出层

output=layers.Dense(10)(x)

#建立模型传入输入和输出层

model=tf.keras.Model(inputs=inputs,outputs=output)

根据以上代码示例,便建立了一个含有卷积和全连接的神经网络。并且每一层都可以独立提出来,也就是说可以查看每一层的输出情况,可以在一些复杂模型中抽取特定层放入自己的代码中,比如抽取VGG19中的某些层放在自己的代码中去实现图像的风格迁移。

6 总结

tf.keras.SequentialKeras Functional API都可以有助于快速地建立神经网络模型,.Sequential简单易懂,在既定框架下可以最快的搭建些不是很复杂的模型,Functional API同样简单可扩展性高,应用范围更广。

这两种方式来解决认证考试中的前两项内容,相信绰绰有余。




目录
相关文章
|
2月前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
356 55
|
7天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
51 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
2月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
220 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
2月前
|
人工智能 缓存 异构计算
云原生AI加速生成式人工智能应用的部署构建
本文探讨了云原生技术背景下,尤其是Kubernetes和容器技术的发展,对模型推理服务带来的挑战与优化策略。文中详细介绍了Knative的弹性扩展机制,包括HPA和CronHPA,以及针对传统弹性扩展“滞后”问题提出的AHPA(高级弹性预测)。此外,文章重点介绍了Fluid项目,它通过分布式缓存优化了模型加载的I/O操作,显著缩短了推理服务的冷启动时间,特别是在处理大规模并发请求时表现出色。通过实际案例,展示了Fluid在vLLM和Qwen模型推理中的应用效果,证明了其在提高模型推理效率和响应速度方面的优势。
云原生AI加速生成式人工智能应用的部署构建
|
2月前
|
机器学习/深度学习 人工智能 算法
人工智能浪潮下的编程实践:构建你的第一个机器学习模型
在人工智能的巨浪中,每个人都有机会成为弄潮儿。本文将带你一探究竟,从零基础开始,用最易懂的语言和步骤,教你如何构建属于自己的第一个机器学习模型。不需要复杂的数学公式,也不必担心编程难题,只需跟随我们的步伐,一起探索这个充满魔力的AI世界。
74 12
|
3月前
|
机器学习/深度学习 数据采集 人工智能
探索人工智能中的深度学习模型优化策略
探索人工智能中的深度学习模型优化策略
127 13
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
TensorFlow,一款由谷歌开发的开源深度学习框架,详细讲解了使用 TensorFlow 构建深度学习模型的步骤
本文介绍了 TensorFlow,一款由谷歌开发的开源深度学习框架,详细讲解了使用 TensorFlow 构建深度学习模型的步骤,包括数据准备、模型定义、损失函数与优化器选择、模型训练与评估、模型保存与部署,并展示了构建全连接神经网络的具体示例。此外,还探讨了 TensorFlow 的高级特性,如自动微分、模型可视化和分布式训练,以及其在未来的发展前景。
351 5
|
3月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
141 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
3月前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
179 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
人工智能与模型知识库在移动医疗产品中的落地应用
在现代医疗体系中,通义千问大模型与MaxKB知识库的结合,为医生和患者提供了前所未有的支持与便利。该系统通过实时问答、临床决策辅助、个性化学习和患者教育等功能,显著提升了诊疗效率和患者满意度。实际应用如乐问医学APP展示了其强大优势,但数据隐私和安全问题仍需关注。
107 0

热门文章

最新文章