函数式API | 学习笔记

简介: 快速学习函数式 API

开发者学堂课程【Tensorflow2.0入门与实战函数式API】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/664/detail/11112


函数式API


内容介绍:

一、 什么是函数式 API

二、 函数式 API 的写法


一、什么是函数式API

函数是什么样子的呢?

当我们定义一个函数之后,然后调用这个函数,直接在这个函数后面添加一个参数来调用它。

函数式 API 类似于函数的调用,我们把每一层看成一个函数来调用这一层,这样的写法相对于前面的只有一个输入,只有一个输出,中间都是顺序连接的单一结构的模型,函数式 API 可以实现引入残差或者输入直接连接输出。

学习完函数式 API,我们可以自己 diy 网络的结构。

 

二、函数式API的写法

首先引入 tensorflow

import tensorflow as tf

然后从 tensorflow 引入 keras,引入 matplotlib

from tensorflow import keras

import matplotlib. pyplot as plt

%matplotlib inline

导入 fashion,把 fashion 归一化

fashion_mnist = keras.datasets.fashion_mnist

(train_images,train_labels),(test_images,test_labels)=fashion_mnist.load_data()

train_images = train_images / 255.0

test_images = test_images / 255.0

写模型

函数式 API 的核心思想就在于可以进行调用,对于每一层都可以调用每一层,需要哪一层就直接去调用它。

设置一个输入,keras 为我们提供 keras.Input 这种方法,shape 只需要添加图片的形状,不需要添加第一维度:

input = keras.Input(shape=(28,28))

输入的第一层通过哪里呢,实际上是一个函数调用的过程,输出为x,y,调用结束叫x,比如调用 Flatten,把 Flatten 这一层看成是一个函数,再调用一个 Dense层,输出32个隐藏单元数,activation='relu',把每一层看成一个函数;添加一个Dropout 层,比例是0.5;再调用一个 Dense 层,输出64个隐藏单元数:

x=keras.layers.Flatten()(input)

x= keras.layers.Dense(32,activation='relu')(x)

x = keras.layers. Dropout(0.5)(x)

x= keras. layers.Dense(64,activation='relu')(x)

最后,做一个输出,输出10个隐藏单元数,relu 换成 softmax,调用x:

output = keras.layers.Dense(10,activation='softmax')(x)

这样就建立好了 input output,在他们之间就是这个网络。

如何建立 model,keras.Model 这个方法,写好 inputs outputsinputs=input,outputs=output

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

根据输入、输出初始化好这个模型,看一下这个模型的样子:

model. summary()

image.png

模型的输入层[(None,28,28)]

None,这个维度是一个个数,一个代表个数的维度,一般来说不需要关心它,意思是任意一个

第二层是 flatten 层,第三层是 dense 层,第四层是 dropout 层,第五层是 dense层,第六层是输出层。这样就建立好这个 model,这就是函数式API来完成这个模型。

重点是建立好 input,一层一层地调用,最后建立 output,初始化 model,需要注意的是 input output 之间应该是关联的,中间某一层关系的断连都会产生错误。

函数式 API 有哪些好处呢?

可以建立多输入或者说多输出的模型,可以建立两个inputinput1input2,使用两个 input 提取信息,建立一个模型,例如:

input1 =keras.Input (shape=(28,28))

input2 = keras.Input(shape=(28,28))

x1=keras.layers.Flatten()(input1)

x2= keras.layers.Flatten()(input2)

x=keras. layers.concatenate([x1, x2])

x=keras.layers. Dense (32,activation='relu')(x)

output = keras.layers. Dense(1,activation='sigmoid')(x)

model =keras.Model(inputs=[input1,input2],outputs=output)

model. Summary()

得到两个 input 之后,把两个x1、x2合并起来叫做x,判断两个图片是否为同一类型,是一个逻辑回归问题(是和否的问题),所以合并在一起之后,添加一个dense 层,最后添加输出层,output 输出一个概率值,输出一个值,且为逻辑回归,这样就建立好这个模型,有两个输入和一个输出,所以 inputs=[input1,input2],outputs=output

这个 model 中间产生分叉,有两个输入,两个 flatten,有个 concatenate 合并在一起,随后变成一个 Dense,得到一个概率输出,这就是整个模型。

相关文章
|
存储 算法 Oracle
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
313 125
|
人工智能 监控 安全
F5社区学习笔记:API和AI如何改变应用安全?
F5社区学习笔记:API和AI如何改变应用安全?
132 1
|
前端开发 API
前端学习笔记202305学习笔记第二十二天-学生列表api封装1
前端学习笔记202305学习笔记第二十二天-学生列表api封装1
108 0
|
jenkins API 持续交付
jenkins学习笔记之十五:SonarSQube API使用
jenkins学习笔记之十五:SonarSQube API使用
|
XML API 数据格式
【Qt 学习笔记】QWidget的enable属性 | API的介绍
【Qt 学习笔记】QWidget的enable属性 | API的介绍
422 0
|
前端开发 API
前端学习笔记202305学习笔记第二十二天-学生列表api封装2
前端学习笔记202305学习笔记第二十二天-学生列表api封装2
172 1
|
前端开发 API
前端学习笔记202305学习笔记第二十二天-新增修改api的封装2
前端学习笔记202305学习笔记第二十二天-新增修改api的封装2
177 0
前端学习笔记202305学习笔记第二十二天-新增修改api的封装2
|
前端开发 API
前端学习笔记202305学习笔记第三十天-什么是mvc-c层api 前后端联动1
前端学习笔记202305学习笔记第三十天-什么是mvc-c层api 前后端联动1
209 0
|
前端开发 API
前端学习笔记202305学习笔记第三十一天-什么是mvc-c层api 前后端联动3
前端学习笔记202305学习笔记第三十一天-什么是mvc-c层api 前后端联动3
103 0
|
前端开发 API
前端学习笔记202305学习笔记第三十一天-什么是mvc-c层api 和mvc总结3
前端学习笔记202305学习笔记第三十一天-什么是mvc-c层api 和mvc总结3
165 0