使用Sequential方法训练鸢尾花模型

import tensorflow as tf
from sklearn import datasets
import numpy as np
import os
# 屏蔽警告
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
# 训练集输入特征
x_train = datasets.load_iris().data
# 训练集的标签
y_train = datasets.load_iris().target

# 数据集的乱序
np.random.seed(116)
np.random.shuffle(x_train)
np.random.seed(116)
np.random.shuffle(y_train)
tf.random.set_seed(116)

# 搭建网络结构
model = tf.keras.models.Sequential([
    # (神经元个数,激活函数,正则化方法)
    tf.keras.layers.Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())
])

# 配置训练方法                      SGD 优化器,learnRate=0.1
model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1),
              # 选择损失函数,激活函数使用softmax,输出是概率分布,选择False
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              # 选择评测指标
              metrics=['sparse_categorical_accuracy'])

# 执行训练过程,(输入特征,标签,喂入数据,迭代次数,选择0.2部分作为测试集,验证准确率的间隔次数)
model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20)
# 打印模型结构
model.summary()

训练结果:

图片说明

图片说明

使用Sequential方法训练Fashion图像识别模型

import tensorflow as tf

fashion = tf.keras.datasets.fashion_mnist

(x_train, y_train),(x_test, y_test) = fashion.load_data()
# 归一化数据
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
    # 拉直数据
    tf.keras.layers.Flatten(),
    # 定义神经元个数,和激活函数
    tf.keras.layers.Dense(128, activation='relu'),
    # 定义二层神经元和激活函数
    tf.keras.layers.Dense(10, activation='softmax')
])

# 配置训练
model.compile(optimizer='adam',
              # 选择损失函数
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=['sparse_categorical_accuracy']
)

# fit训练
model.fit(x_train, y_train, batch_size=64, epochs=10, validation_data=(x_test, y_test), validation_freq=1)

model.summary()

输出结果:

图片说明

图片说明
需要注意的是此时出现了过拟合

使用class训练Fashion识别

import tensorflow as tf
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras import Model

fashion = tf.keras.datasets.fashion_mnist

(x_train, y_train), (x_test, y_test) = fashion.load_data()
# 归一化
x_train, x_test = x_train / 255.0, x_test / 255.0


class MnistModel(Model):
    def __init__(self):
        super(MnistModel, self).__init__()
        self.flatten = Flatten()
        self.d1 = Dense(128, activation='relu')
        self.d2 = Dense(10, activation='softmax')

    def call(self, x):
        x = self.flatten(x)
        x = self.d1(x)
        y = self.d2(x)
        return y


model = MnistModel()

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=['sparse_categorical_accuracy'])

model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1)
model.summary()