TensorFlow2.0 Alpha版已经发布,在2.0中最重要的API或者说到处都出现的API是谁,那无疑是Keras。因此用过2.0的人都会吐槽全世界都是Keras。今天我们就来说说Keras这个高级API。
作者 | 汤兴旺
编辑 | 汤兴旺
1 Keras概述
在TensorFlow2.0中,Keras是一个用于构建和训练深度学习模型的高阶 API。因此如果你正在使用TensorFow2.0,那么使用Keras构建深度学习模型是您的不二选择。在Keras API中总共有如下三大块:
在Modules中有构建训练模型各种必备的组件,如激活函数activations、损失函数losses、优化器optimizers等;在Class中有Sequential和Model两个类,它们用来堆叠模型;在Functions中有Input()函数,它用来实例化张量。
因此若您使用的深度学习框架是TensorFlow,而且是2.0版本,那么你就不可能不使用tensorflow.keras。这也就是使用过TensorFlow2.0版本的都在吐槽全世界都是Keras的原因。
2 Modules
通过上面的介绍,我们知道在Modules中有activations、losses、optimizers等构建训练模型时各种必备的组件。下图就是Modules中有所的模块。
下面我们详细说说里面最常见的几个模块应该如何使用。
1. 常用的数据集(datasets)
在TensorFlow2.0中,常用的数据集需要使用tf.keras.datasets来加载,在datasets中有如下数据集。
对于上图中的数据集我们可以像下面这样加载
(train_images,train_labels),(test_images,test_labels)= keras.datasets.fashion_mnist.load_data()
当然我们平时使用的数据集肯定不在于此,这些数据集都是些最基础的数据集。对于自己的数据如何读取,请期待我们下次的分享。
2. 神经网络层(Layers)
在构建深度学习网络模型时,我们需要定制各种各样的层结构。这时候就要用到layers了,下图是TensorFlow2.0中部分层,它们都是Layer的子类。
那么我们如何使用layer来构建模型呢?方法如下:
from tensorflow.keras import layers
layers.Conv2D()
layers.MaxPool2D()
layers.Flatten()
layers.Dense()
3. 激活函数(Optimizers)
在构建深度学习网络时,我们经常需要选择激活函数来使网络的表达能力更强。下面将介绍TensorFlow2.0中的激活函数及它们应该在TensorFlow2.0中该如何使用。下图是TensorFlow2.0中部分激活函数:
from tensorflow.keras import layers
layers.Conv2D(...,activation='relu')
layers.Dense(...,activation='softmax')
4. 优化器(activations)
通常当我们准备好数据,设计好模型后,我们就需要选择一个合适的优化器(Optimizers)对模型进行优化。下面将介绍TensorFlow2.0中的优化器及他们应该在TensorFlow2.0中该如何使用。下图是TensorFlow2.0中所有的优化器,它们都是Optimizer的子类。
对于优化器的使用你可以像下面这样使用:
optimizers = tf.keras.optimizers.Adam()
optimizers = tf.keras.optimizers.SGD()
...
5. 损失函数(Losses)
我们知道当我们设计好模型时我们需要优化模型,所谓的优化就是优化网络权值使损失函数值变小,但是损失函数变小是否能代表精度越高呢?那么多的损失函数,我们又该如何选择呢?接下来我们了解下在TensorFlow2.0中如何使用损失函数。下图是TensorFlow2.0中所有的损失函数,它们都是Loss的子类。
对于损失函数的使用你可以像下面这样使用:
loss = tf.keras.losses.SparseCategoricalCrossentropy()
loss = tf.keras.losses.mean_squared_error()
...
3 Class
在Class中有Sequential和Model两个类,它们分别是用来堆叠网络层和把堆叠好的层实例化可以训练的模型。
1. Model
对于实例化Model有下面两种方法
(1).使用keras.Model API
import tensorflow as tftf.keras.Model(inputs=inputs, outputs=outputs)
(2).继承Model类
import tensorflow as tfclass MyModel(tf.keras.Model):
2. Sequential
在TensorFlow2.0中,我们可以使用Sequential模型。具体方式如下:
model = keras.Sequential()
model = model.add(layers.Conv2D(input_shape=(x_train.shape[1], x_train.shape[2],x_train.shape[3]),filters=32,kernel_size=(3,3), strides=(1,1), padding='valid',activation='relu'))
model.add(layers.MaxPool2D(pool_size=(2,2)))
model.add(layers.Flatten())model.add(layers.Dense(32,activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.compile(optimizer=keras.optimizers.Adam(),loss=keras.losses.SparseCategoricalCrossentropy(),metrics=['accuracy'])
4 Functions
在Functions中,有一个Input函数,其用来实例化Keras张量。对于Input函数,它有如下参数
tf.keras.Input(
具体方法如下:
x = Input(shape=(32,))
5 简单的图像分类模型实例
#1导入相应的API
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
#2加载数据
(train_images,train_labels),(test_images,test_labels)= keras.datasets.fashion_mnist.load_data()
#3构建网络
model = keras.Sequential()
model = model.add(layers.Conv2D(input_shape=(x_train.shape[1], x_train.shape[2],x_train.shape[3]),filters=32,kernel_size=(3,3), strides=(1,1), padding='valid',activation='relu'))
model.add(layers.MaxPool2D(pool_size=(2,2)))
model.add(layers.Flatten())model.add(layers.Dense(32,activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.compile(optimizer=keras.optimizers.Adam(),loss=keras.losses.SparseCategoricalCrossentropy(),metrics=['accuracy'])
#4模型显示
model.summary()
#5模型训练
model_train=model.fit(x_train, y_train, batch_size=64, epochs=5, validation_split=0.1)
总结
在本讲中,我们简单的了解了TensorFlow2.0中高级API Keras是如何使用的,我们可以看到Keras真的是无处不在,如果你想学好TensorFlow2.0,那么你必须掌握好Kears。
下期预告:如何读取自己的数据集及数据的使用。
最近直播
今日看图猜技术
网络结构
更多精彩内容请关注知乎专栏《有三AI学院》
转载文章请后台联系
侵权必究
往期精选
【TensorFlow2.0】TensorFlow2.0专栏上线,你来吗?
【AI初识境】从3次人工智能潮起潮落说起
【AI初识境】从头理解神经网络-内行与外行的分水岭
【AI初识境】近20年深度学习在图像领域的重要进展节点
【AI初识境】激活函数:从人工设计到自动搜索
【AI初识境】什么是深度学习成功的开始?参数初始化
【AI初识境】深度学习模型中的Normalization,你懂了多少?
【AI初识境】为了围剿SGD大家这些年想过的那十几招
【AI初识境】被Hinton,DeepMind和斯坦福嫌弃的池化,到底是什么?
【AI初识境】如何增加深度学习模型的泛化能力
【AI初识境】深度学习模型评估,从图像分类到生成模型
【AI初识境】深度学习中常用的损失函数有哪些?
【AI初识境】给深度学习新手做项目的10个建议
【AI不惑境】数据压榨有多狠,人工智能就有多成功
【AI不惑境】网络深度对深度学习模型性能有什么影响?
【AI不惑境】网络的宽度如何影响深度学习模型的性能?
【AI不惑境】学习率和batchsize如何影响模型的性能?
【完结】深度学习CV算法工程师从入门到初级面试有多远,大概是25篇文章的距离
【完结】优秀的深度学习从业者都有哪些优秀的习惯
【完结】给新手的12大深度学习开源框架快速入门项目
【完结】总结12大CNN主流模型架构设计思想
创业第一天,有三AI扔出了深度学习的150多篇文章和10多个专栏
言有三新书预售,不贵,有料
这个春天,有三最后一月的学习“季划”招生
有三AI VIP会员发售,你的私人AI顾问已上线
有三AI知识星球官宣,BAT等大咖等你来撩
有三AI小程序上线,把你的代码show给世界
揭秘7大AI学习板块,这个星球推荐你拥有