tf2学习04:实战分类模型之添加数据统一化提高准确率

1、添加数据统一化提高准确率

%matplotlib inline
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import sys
import os
import time
import sklearn

import tensorflow as tf
from tensorflow import keras # 从tf中导入keras,即tf.keras 若想纯keras需导入import keras

# modelu模块
for modelu in mpl, np, pd, sklearn, tf, keras:
    print(modelu.__name__, modelu.__version__)
  • 1.使用tf.keras处理数据,导入数据、了解数据集

# 图像分类数据集(时装:fashion MNIST:手写数字识别、代码实现、数据集、图像)
fashion_mnist = keras.datasets.fashion_mnist
# 数据分为验证集、训练集、测试集
# 分训练集和测试
(x_train_all, y_train_all), (x_test, y_test) = fashion_mnist.load_data()
# 将训练集再次拆分为训练集和验证集
# 前5000条数据作为验证集
x_valid, x_train = x_train_all[:5000], x_train_all[5000:]
y_valid, y_train = y_train_all[:5000], y_train_all[5000:]

print('x_valid y_valid:', x_valid.shape, y_valid.shape)
print('x_train y_train:', x_train.shape, y_train.shape)
print('x_test y_test:', x_test.shape, y_test.shape)
print(np.max(x_train), np.min(x_train))
255 0
  • 添加数据统一化:提高准确率

# x = (x - u) / std 
# u均值、std方差、这样数据就服从均值为0方差为1的正态分布

# 使用sklearn实现归一化
from sklearn.preprocessing import StandardScaler
# 初始化
scaler = StandardScaler()
#训练集归一化
# x_train:三维的,归一化时要转成二维的,归一化完再转回三维的
#  ([None, 28, 28] -> [None, 784]) ->[None, 28, 28]
# 数据原来是np.int要转成np.float32
# 训练集使用fit_transform会将均值和方差记录下来,同时验证集和测试集也会使用这个均值方差,这样归一化效果会好
x_train_scaled = scaler.fit_transform(x_train.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28)
x_valid_scaled = scaler.transform(x_valid.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28)
x_test_scaled = scaler.transform(x_test.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28)
print(np.max(x_train_scaled), np.min(x_train_scaled))
2.0231433 -0.8105136
  • 2.使用tf.keras构建分类模型

# 使用tf.keras.models.Sequential()构建分类模型
# 1、创建Sequention()对象
model = keras.models.Sequential()
# 2、添加层次:输入层、全连接层、输出层
# 2.1输入层:输入是28*28的图像,Flatten表示展屏:将28*28的二维矩阵展屏为一维向量
model.add(keras.layers.Flatten(input_shape=[28,28]))
# 2.2全连接层:神经网络中一层,下一层和上一层一一链接,单元数300,activation激活函数
model.add(keras.layers.Dense(300, activation="relu"))
# 再加一层全连接层,100个单元数,和上一层做连接
model.add(keras.layers.Dense(100, activation="relu"))
# 2.3 输出层:输出是长度为10的向量,activation激活函数softmax
model.add(keras.layers.Dense(10, activation="softmax"))

"""
# 还可以在初始化时构建模型
model = keras.models.Sequential([
    keras.layers.Flatten(input_shape=[28,28],
    keras.layers.Dense(300, activation="relu"),
    keras.layers.Dense(100, activation="relu"),
    keras.layers.Dense(10, activation="softmax")
])
"""

# activation:激活函数
# relu:y = max(0, x) :x小于0,返回0;x大于0,返回x
# softmax:将向量变成概率分布
#     向量:x=[x1,x2,x3]
#           sum = e^x1 + e^x2 + e^x3
# 概率分布:y = [e^x1/sum, e^x2/sum,e^x3/sum] :概率值在0-1之间,和为1

# 3、损失函数、求解方法、度量指标
# reason for sparse:y->index. y->on_hot->[]
model.compile(loss="sparse_categorical_crossentropy" #crossentropy交叉熵损失函数、categorical分类
              ,optimizer="adam" # 求解方法:传统随机梯度下降(SGD)、adam为sgd的一阶优化算法 
              ,metrics=["accuracy"]) # 度量:精确度
  • 3.使用tf.keras训练分类模型

# 传入训练集、遍历10次数据集、验证集验证
history = model.fit(x_train_scaled, y_train, epochs=10, validation_data=(x_valid_scaled, y_valid))
Train on 55000 samples, validate on 5000 samples
Epoch 1/10
55000/55000 [==============================] - 4s 80us/sample - loss: 0.4566 - accuracy: 0.8332 - val_loss: 0.3797 - val_accuracy: 0.8598
Epoch 2/10
55000/55000 [==============================] - 4s 74us/sample - loss: 0.3552 - accuracy: 0.8692 - val_loss: 0.3384 - val_accuracy: 0.8760
Epoch 3/10
55000/55000 [==============================] - 4s 76us/sample - loss: 0.3158 - accuracy: 0.8833 - val_loss: 0.3353 - val_accuracy: 0.8818
Epoch 4/10
55000/55000 [==============================] - 4s 76us/sample - loss: 0.2931 - accuracy: 0.8908 - val_loss: 0.3324 - val_accuracy: 0.8794
Epoch 5/10
55000/55000 [==============================] - 4s 77us/sample - loss: 0.2726 - accuracy: 0.8971 - val_loss: 0.3159 - val_accuracy: 0.8892
Epoch 6/10
55000/55000 [==============================] - 4s 75us/sample - loss: 0.2586 - accuracy: 0.9038 - val_loss: 0.3083 - val_accuracy: 0.8880
Epoch 7/10
55000/55000 [==============================] - 5s 83us/sample - loss: 0.2430 - accuracy: 0.9085 - val_loss: 0.3229 - val_accuracy: 0.8876
Epoch 8/10
55000/55000 [==============================] - 4s 81us/sample - loss: 0.2297 - accuracy: 0.9133 - val_loss: 0.3180 - val_accuracy: 0.8888
Epoch 9/10
55000/55000 [==============================] - 5s 82us/sample - loss: 0.2192 - accuracy: 0.9168 - val_loss: 0.3165 - val_accuracy: 0.8952
Epoch 10/10
55000/55000 [==============================] - 4s 82us/sample - loss: 0.2084 - accuracy: 0.9225 - val_loss: 0.3409 - val_accuracy: 0.8898
  • 4.指标图示打印

#### 4.指标图示打印
def plot_learning_curves(history):
    pd.DataFrame(history.history).plot(figsize=(8,5))
    plt.grid(True) # 显示网格
    plt.gca().set_ylim(0, 1) #设置y范围
    plt.show()
plot_learning_curves(history)
image.png
  • 5.测试集上评估

model.evaluate(x_test_scaled, y_test)
10000/10000 [==============================] - 0s 38us/sample - loss: 0.3600 - accuracy: 0.8793
[0.3600435515999794, 0.8793]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355