tensorflow——FashionMnist

  • 数据集下载

下载说明看https://github.com/zalandoresearch/fashion-mnist/blob/master/README.zh-CN.md

和mnist数据集类似。

数据集读取问题请详看tensorflow——FashionMnist数据集读取问题

  •  数据表现形式用matlibplot

与mnist数据不同的是,此次数据集是非单一热点模式

 

 奉上代码实现:

import tensorflow as tf
import numpy as np
import tensorflow.keras as keras
from tensorflow.keras.datasets import fashion_mnist
from tensorflow.keras import layers
from tensorflow.keras.datasets import mnist
import  matplotlib.pyplot as plt
import read

train_image_filename='data/train-images-idx3-ubyte.gz'
train_label_filename='data/train-labels-idx1-ubyte.gz'
test_image_filename='data/t10k-images-idx3-ubyte.gz'
test_label_filename='data/t10k-labels-idx1-ubyte.gz'

train_buffer_size=60000
test_buffer_size=10000

x_train = read.get_images(train_image_filename).reshape(-1, 28, 28)/255.
y_train = read.get_labels(train_label_filename)
x_test =  read.get_images(test_image_filename ).reshape(-1, 28, 28)/255.
y_test =  read.get_labels(test_label_filename )
plt.figure()
plt.imshow(x_train[0])#显示第一张图片


model = keras.models.load_model('model.h5')#导入训练好的模型
predictions = model.predict(x_test)
print(predictions[0])
print(np.argmax(predictions[0]))
print(y_test[0])
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
               'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']

def score_bar(i, prediction_array, xticks, num_classes=10):
    plt.figure()
    plt.grid(False)
    x = np.arange(num_classes)
    if i >= 0:
        plt.bar(range(num_classes), prediction_array[i], color='#777777')
        for index,data in zip(x,list(prediction_array[i])):
            plt.text(index, data, '%.3f' %data, ha='center', va='bottom', fontsize=7)
    else:
        plt.bar(range(num_classes), prediction_array, color='#777777')
        for index,data in zip(x,list(prediction_array)):
            plt.text(index, data, '%.3f' %data, ha='center', va='bottom', fontsize=7)
            
    plt.xticks(x, list(xticks), size='small', rotation=30)
    plt.ylim([0,1])
    plt.title('Score')
    plt.xlabel('class_names')
    plt.ylabel('accuracy-rate')
    plt.show()

score_bar(0, predictions, class_names, 10)#显示第一张图片预测结果

def all_kind_score_bar(test_label, prediction_array, x_ticks, num_classes=10):
    test_each_kind_num = np.zeros([10])
    test_each_kind_acc_num = np.zeros([10])
    dst_prediction_rate = np.zeros([10]).astype('float32')
    for i in range(len(y_test)):
        test_each_kind_num[y_test[i]] += 1
    for i in range(len(y_test)):
        if(np.argmax(predictions[i]) == test_label[i]):
            test_each_kind_acc_num[y_test[i]] += 1
    test_each_kind_num.astype('float32')
    test_each_kind_acc_num.astype('float32')
    for i in range(num_classes):
        dst_prediction_rate[i] = test_each_kind_acc_num[i] / test_each_kind_num[i]
    score_bar(-1, dst_prediction_rate, x_ticks, num_classes)
    
all_kind_score_bar(y_test, predictions, class_names, num_classes=10)#显示10种样本预测正确性


'''#训练模型
inputs = tf.keras.Input(shape=[28,28], name='img')
x =  layers.Flatten()(inputs)
h1 = layers.Dense(128, activation='relu')(x)
pred = layers.Dense(10, activation='softmax')(h1)

model = tf.keras.Model(inputs=inputs, outputs=pred)
model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.5),
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(x_train, y_train, batch_size=100, epochs=5)

test_score = model.evaluate(x_test, y_test)


print('test loss: %0.3f' %test_score[0])
print('test acc: %0.3f' %test_score[1])
model.save('model.h5')#保存模型
'''

 

### 使用机器学习模型对Fashion MNIST数据集进行分类 #### 加载并准备数据 为了使用机器学习模型对Fashion MNIST数据集进行分类,首先需要加载该数据集。可以利用Keras内置的数据集模块来获取这些数据。 ```python from tensorflow.keras.datasets import fashion_mnist (train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data() train_images = train_images / 255.0 test_images = test_images / 255.0 ``` 上述代码片段展示了如何导入必要的库以及标准化像素值到范围\[0,1\]内[^1]。 #### 构建模型架构 构建一个简单的神经网络用于处理图像分类任务。这里展示了一个基于全连接层的基础模型结构: ```python import tensorflow as tf from tensorflow import keras model = keras.Sequential([ keras.layers.Flatten(input_shape=(28, 28)), keras.layers.Dense(128, activation='relu'), keras.layers.Dense(10) ]) ``` 此部分定义了一种多层感知器(MLP),它由一层展平操作、一层具有ReLU激活函数的密集层组成,并最终通过输出层映射至十个可能的结果标签之一。 #### 编译与训练模型 编译阶段指定了优化算法、损失函数以及其他评估指标;而`fit()`方法则用来启动实际的学习过程,在给定轮次(`epochs`)期间调整权重以最小化误差。 ```python model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy']) model.fit(train_images, train_labels, epochs=5) ``` 这段脚本说明了Adam优化器的选择及其配置方式,同时也设定了稀疏分类交叉熵作为目标函数来进行监督式学习。 #### 测试性能 完成训练之后,应当检验所建立模型的表现情况,特别是关注其泛化能力——即能否很好地适应未见过的新样本而非仅仅记忆住已有资料中的模式。 ```python test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2) print('\nTest accuracy:', test_acc) ``` 值得注意的是,通常情况下测试集合上的得分会稍逊于训练过程中观察到的最佳成绩,这可能是由于过拟合现象所致[^2]。 #### 可视化混淆矩阵 对于某些特定类别的错误识别问题,可以通过绘制关联性热力图的方式直观理解哪些类别之间容易发生混淆。例如靴子和滑板鞋、T恤衫和衬衫这类相似项往往会被错认得更多一些[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值