函数式API构建模型

import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

01 简单的函数API构建模型实例

1.1 建立模型

inputs = keras.Input(shape=(784,))
# 输入层,给定输入形状,忽略批次大小,样本大小为784,因此接受的输入形状为[None,784]
dense = layers.Dense(64, activation="relu")
# 线性堆叠层(全连接),参数个数为64×784+64=50240 每一行为一批样本
x = dense(inputs)
x = layers.Dense(64, activation="relu")(x)
outputs = layers.Dense(10)(x)
model = keras.Model(inputs=inputs, outputs=outputs, name="mnist_model")
# 关键字参数,输入inputs,输出outputs
model.summary()
Model: "mnist_model"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) [(None, 784)] 0
dense (Dense) (None, 64) 50240
dense_1 (Dense) (None, 64) 4160
dense_2 (Dense) (None, 10) 650
=================================================================
Total params: 55,050
Trainable params: 55,050
Non-trainable params: 0
_________________________________________________________________

1.2 绘制模型计算层图

keras.utils.plot_model(model, "my_first_model.png",show_shapes=True)
# show_shapes=True 绘制计算层图显示输入输出形状

image

1.3 训练、评估、推断

(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data(path='mnist.npz')
# 载入数据,返回Tuple of NumPy arrays: (x_train, y_train), (x_test, y_test).
# 数据集60000×28×28 测试集10000×28×28
x_train = x_train.reshape(60000, 784).astype("float32") / 255 #归一化[0,1]
x_test = x_test.reshape(10000, 784).astype("float32") / 255
print(y_train.dtype)
#编译模型
model.compile(
loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
optimizer=keras.optimizers.RMSprop(),
metrics=["accuracy"],
)
# 这里为什么采用SpareCategoricalCrossentropy,这里的标签并非采用的独热编码(one-hot),label为整形
history = model.fit(x_train, y_train, batch_size=64, epochs=2, validation_split=0.2)
test_scores = model.evaluate(x_test, y_test, verbose=2)
print("Test loss:", test_scores[0])
print("Test accuracy:", test_scores[1])
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11490434/11490434 [==============================] - 2s 0us/step
uint8
Epoch 1/2
750/750 [==============================] - 1s 1ms/step - loss: 0.3449 - accuracy: 0.9018 - val_loss: 0.1955 - val_accuracy: 0.9438
Epoch 2/2
750/750 [==============================] - 1s 1ms/step - loss: 0.1616 - accuracy: 0.9518 - val_loss: 0.1354 - val_accuracy: 0.9602
313/313 - 0s - loss: 0.1313 - accuracy: 0.9600 - 186ms/epoch - 595us/step
Test loss: 0.131303071975708
Test accuracy: 0.9599999785423279

02 处理复杂的计算拓扑图

2.1 具有多个输入和输出的模型

posted @   Vandaci  阅读(63)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示