我在使用tf.keras时,训练数据集中有55000条数据,在使用fit方法时没有指定butch_size。结果产生了一下结果,1719 代表的是什么那,问什么不是55000啊
# ->实战分类模型之数据归一化
# 实战分类模型之模型构建
# 数据读取和显示
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import sklearn
import pandas as pd
import os
import sys
import time
import tensorflow as tf
from tensorflow import keras
from sklearn.preprocessing import StandardScaler
# sys.version_info(major=3, minor=7, micro=7, releaselevel='final', serial=0)
# matplotlib 3.3.0
# numpy 1.18.5
# pandas 1.1.0
# sklearn 0.23.1
# tensorflow 2.3.1
# tensorflow.keras 2.4.0
fashion_mnist = keras.datasets.fashion_mnist
(x_train_all, y_train_all), (x_test, y_test) = fashion_mnist.load_data()
# 将训练数据集分为测试集和验证集,避免过拟合
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.shape, y_valid.shape)
print(x_train.shape, y_train.shape)
print(x_test.shape, y_test.shape)
# (5000, 28, 28) (5000,)
# (55000, 28, 28) (55000,)
# (10000, 28, 28) (10000,)
# 数据归一化, x = (x-u)/std, u 为x的均值,std为方差
scaler = StandardScaler()
# 该方法需要传入一个二维数组,
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)
model = keras.models.Sequential()
# 添加输入层,并将输入的图片展开,将28*28的数据展平,变成一个一维向量
model.add(keras.layers.Flatten(input_shape=(28, 28)))
# 添加一层全连接层,上一层输入为 (None,300)
# relu激活函数:y = max(0,x)
model.add(keras.layers.Dense(300, activation='relu'))
# 再添加一层全连接层,上一层输出为(None,100)
model.add(keras.layers.Dense(100, activation="relu"))
# 再添加一层全连接层,上一层的输出为(None,10)
# softmax激活函数: 将向量变为概率分布,
# 例如 x=[x1,x2,x3] ==> y = [(e^x1)/sum,(e^x2)/sum,(e^x3)/sum) ,sum = e^x1 + e^x2 + e^x3
model.add(keras.layers.Dense(10, activation="softmax"))
# compile 配置模型测试和训练时使用的损失函数,优化器,要评估的指标等信息
# 使用 sparse_categorical_crossentropy 的原因: 此处使用的 y 是一个数值而不是一个向量,
# 如果是一个向量则使用categorical_crossentropy 。
# metrics 模型在训练和测试期间要评估的指标列表。
model.compile(loss="sparse_categorical_crossentropy",
optimizer='sgd',
metrics=['accuracy'])
# epochs 训练多少次,validation_data 训练过程中进行验证时使用的验证数据集。
# model.fit 可以返回训练时所产生的一些结果
history = model.fit(x_train_scaled, y_train, epochs=10,validation_data=(x_valid_scaled,y_valid))
def plot_learning_curves(history):
pd.DataFrame(history.history).plot(figsize=(8, 5))
plt.grid(True)
plt.gca().set_ylim(0, 1)
plt.show()
plot_learning_curves(history)
model.evaluate(x_test_scaled,y_test)