Keras函数式API

概述

函数式(Functional) api 用来构造 比较复杂的模型 ,如:

  • 多个输入模型
  • 多个输出模型
  • 有向非循环图
  • 有共享层的模型

使用函数式api,一般使用 tf.keras.Model

感性认识

本例使用函数式api实现Fashion MNIST图像识别

导入模块

import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np

加载数据

(train_image,train_label),(test_image,test_label)=tf.keras.datasets.fashion_mnist.load_data()

归一化

# 归一化
train_image=train_image/255
test_image=test_image/255

建立模型

函数式api在建立模型时有些不同:

  1. 通过tf.keras.Input()向模型中输入数据,并指定数据的 形状。 详情点击

  2. 将 类对象 作为 函数调用,并 传入上一层的对象


inp=tf.keras.Input(shape=(28,28))
flt=tf.keras.layers.Flatten()(inp)
den1=tf.keras.layers.Dense(128,activation='relu')(flt)
out=tf.keras.layers.Dense(10,activation='softmax')(den1)

# 建立模型
model=tf.keras.Model(inputs=[inp],outputs=[out])

model.summary()

思考

将 实例对象 作为 函数调用 的实现原理:
参见 python面向对象-类的内置方法(补充) 的__call__()

编译

model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['acc'])

训练

model.fit(train_image,train_label,epochs=5)

评估模型

model.evaluate(test_image,test_label)

预测

prd_label=model.predict(test_image)
prd_label.shape
prd_label[0]

计算预测准确率

error_num=0
for item in range(10000):
    label_num=tf.argmax(prd_label[item])
    label_num=int(label_num)
#     print(label_num,test_label[item])
    if label_num!=test_label[item]:
        error_num+=1

print('错误总数:',error_num)
print('正确率:',1-error_num/10000)

原文出处:/show_1EF4TOg6mzFU.html