代码编织梦想

工具的评价

这个仅仅是视觉化的工具,可以帮助理解模型和数据,因为是降维投影,损失了信息,并不能作为提高模型效果的算法。

数据集和模型

数据集--fashion minst

简单的模型--2层全连接,效果很一般,就是个玩具

#  fashion_mnist 数据集
#  https://tensorflow.google.cn/tutorials/keras/classification


# TensorFlow and tf.keras
import tensorflow  as tf                #  debug <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  ModuleNotFoundError: No module named 'gast'     'flatbuffers'
                                                                        # 解决  
                                                                        # pip uninstall gast      
                                                                        # pip install gast==0.4.0 -i  https://pypi.tuna.tsinghua.edu.cn/simple 
                                                                        #  pip uninstall flatbuffers
                                                                        # pip install flatbuffers==1.12 -i  https://pypi.tuna.tsinghua.edu.cn/simple 

from tensorflow import keras           #   keras 

import numpy as np                     #   numpy   矩阵数据处理

import matplotlib.pyplot as plt        #  matplotlib 绘图

print(tf.__version__)


fashion_mnist = keras.datasets.fashion_mnist    #  数据集   from https://storage.googleapis.com/tensorflow/tf-keras-datasets/
                                                                        #  train-labels-idx1-ubyte.gz  
                                                                        #  train-images-idx3-ubyte.gz       
                                                                        #  t10k-labels-idx1-ubyte.gz 
                                                                        #  t10k-images-idx3-ubyte.gz
                                                                        #    /home/cc/.keras/datasets
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()



class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
                             'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']


train_images = train_images / 255.0

test_images = test_images / 255.0

model = keras.Sequential([                                                                                                                                       #  模型 ,  展平层 + 全连接层 + 全连接层
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation='relu'),
    # keras.layers.Dense(64, activation='relu'),
    # keras.layers.Dense(32, activation='relu'),
    keras.layers.Dense(10)
])

model.compile(optimizer='adam',                                                                                                                          #  模型超参数
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

model.fit(train_images, train_labels, epochs=5 )   #  开始训练模型,得到模型参数



print('\n')   
test_loss, test_acc = model.evaluate(test_images,  test_labels, verbose=1)                 #  评估模型   , 输入数据和标签,输出损失值和其他指标
                                                                                            # [vɜːˈbəʊs] verbose = 0  不 输出日志 ,verbose = 1  进度条+记录, verbose = 2   记录
print('Test accuracy:', test_acc)                                                         #  打印损失值   



看看测试数据集里的图片

print('看测试数据集中  前5个数据 ======================================')
for  peekImage in range(5):
    print('▼↓ 测试图像,测试标签: ',test_labels[peekImage], class_names[ test_labels[peekImage] ])
    plt.figure()
    plt.imshow(test_images[peekImage])
    plt.colorbar()
    plt.grid(False)
    plt.show()
    

在训练好的模型基础上做预测,

用测试数据集里的照片,或自己准备的照片

#  预测
print("预测test 数据集的100张图片, 如果有误就打印出来=============================================")

# predictions = model.predict(test_images, batch_size=1) #预测  
predictions = model.predict_classes(test_images, batch_size=16, verbose=1) #预测  ,加进度条
# predictions = model.predict(test_images[5], batch_size=1) #显示 一个预测
#  model.predict(X_test, batch_size=32,verbose=1)   # verbose:1代表显示进度条

for i in range(100):  
    if (test_labels[i] != predictions[i]):                                                # 如果预测错误就打印出来
        print('▼实际标签      ',test_labels[i],class_names[test_labels[i] ])
        print('  预测结果      ',predictions[i],class_names[predictions[i] ] ,"\n")
        plt.figure()
        plt.imshow(test_images[i])
        plt.colorbar()
        plt.grid(False)
        plt.show()
        


    
    
print('测试20个数据 ,看是否有误======================================')
for i in range(20):
    if (test_labels[i] != predictions[i]):
        print("检测数据集标号:",i)
        print('实际标签         ',test_labels[i] )
        print('预测结果         ',predictions[i] )



print('再测试一遍,预测test 数据集的前35个数据 ,看是否有错误===========================')
plt.figure(figsize=(10,10))
for i in range(35):
    plt.subplot(7,5,i+1)      #  画 35个预测结果, 7行5列
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(test_images[i], cmap=plt.cm.binary)  #  cmap --color map
    plt.xlabel('lable:'+class_names[test_labels[i]])
    print('predict      ', predictions[i]  ,class_names[predictions[i] ] )
plt.show()



print('将训练集里的单张图片预测分类======================================')
print (test_images[0].reshape(1,28,28).shape)                       # 将2维照片升维, 加一个batch 维度
predicOnePic = model.predict_classes(test_images[0].reshape(1,28,28), batch_size=8, verbose=1)  #预测所有测试集  ,加进度条
print (predicOnePic )





print('将训练集里的4张图片预测分类======================================')
print (test_images[0:4].reshape(4,28,28).shape)                       # 将2维照片升维, 加一个batch 维度
predicOnePic = model.predict_classes(test_images[0:4].reshape(4,28,28), batch_size=8, verbose=1)  #预测所有测试集  ,加进度条
print (predicOnePic )





print('将训练集里的一张图片写成文件======================================')
import cv2
img=test_images[23].reshape(28,28,1)*255     # 因为图片已经标准化处理, 不*255恢复大小,输出图片是黑色的
# newImage = cv2.imwrite("im_save.png", img)
cv2.imwrite('newImage.png',img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])





print('将文件夹里的一张图片预测分类======================================')
import cv2
img= cv2.imread('newImage.png',0)/255     ##  图片标准化处理 ,在 [0,1]区间
img=img.reshape(1,28,28)
predicOnePic = model.predict_classes(img, batch_size=8, verbose=1)  #预测所有测试集  ,加进度条
print (predicOnePic )
print('▼预测标签      ',class_names[ predicOnePic[0] ])
预测test 数据集的100张图片, 如果有误就打印出来=============================================

结果有12个错误,前2个分别是:

▼实际标签        4类   Coat
  预测结果       2类   Pullover 

 

▼实际标签        9类   Ankle boot
  预测结果       5类   Sandal 

再测试一遍,预测test 数据集的前35个数据 ,看是否有误======================================

 

predict       9 Ankle boot  
predict       2 Pullover
predict       1 Trouser
predict       1 Trouser
predict       6 Shirt
predict       1 Trouser
predict       4 Coat
predict       6 Shirt
predict       5 Sandal
predict       7 Sneaker
predict       4 Coat
predict       5 Sandal
predict       7 Sneaker
predict       3 Dress
predict       4 Coat
predict       1 Trouser
predict       2 Pullover
predict       2 Pullover        <------- 错误预测 实际是 4 coat
predict       8 Bag
predict       0 T-shirt/top
predict       2 Pullover
predict       5 Sandal
predict       7 Sneaker
predict       5 Sandal
predict       1 Trouser
predict       2 Pullover
predict       6 Shirt
predict       0 T-shirt/top
predict       9 Ankle boot
predict       4 Coat
predict       8 Bag
predict       8 Bag
predict       3 Dress
predict       3 Dress
predict       8 Bag

 可以看到:第17个预测发生了错误(从0开始数数)

数据集标号:      17 
实际标签          4  coat
预测结果          2  pullover

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012065954/article/details/127301344

邻域保留投影算法(npe)(neighborhood preserving embedding)算法详解_alandreamer的博客-爱代码爱编程_npe算法

上一篇降维算法的相关论文为LPP算法,也是何小飞老师的论文https://blog.csdn.net/qq_39187538/article/details/90402961 1.问题导入 2.算法出处 3.算法详解 4.算法步骤 1.问题导入: 降维的目的是为了缓解维数灾难,比如原始空间X=[x1,x2,...xn],每一个xi有m个维度,要

【机器学习】【降维】局部保持投影(lpp locality preserving projections)_nine_xu的博客-爱代码爱编程_局部保持投影lpp

文章目录 局部保持投影(LPP)一、摘要:二、主要思想三、算法步骤四、算法详解 局部保持投影(LPP) 论文:《Locality Preserving Projections》作者:何小飞(2003)

【机器学习】【降维】局部线性嵌入(lle)原理总结_nine_xu的博客-爱代码爱编程_lle降维原理

文章目录 1、流形学习概述2、LLE思想3、LLE算法推导4、LLE算法流程5、LLE的一些改进6、LLE总结 局部线性嵌入(Locally Linear Embedding,以下简称LLE)也是非常重要的降维

基于图嵌入的降维算法——边界Fisher分析(MFA)-爱代码爱编程

0、前言         降维是计算机视觉、模式识别、机器学习等领域常见的数据分析和处理方法。在人脸识别、数据可视化等领域,通常需要从高维数据中提取有效的低维特征,以方便数据分析和处理。         降维算法主要包括线性降维算法和非线性降维算法。线性降维算法最典型的包括:主成分分析(Principal Component Analysis,PCA)

基于图嵌入的降维算法——局部敏感判别分析(Locality Sensitive Discriminant Analysis ,LSDA)-爱代码爱编程

0、前言          上一篇介绍了边界Fisher分析(MFA),这一篇承接上一篇,继续介绍局部敏感判别分析(Locality Sensitive Discriminant Analysis ,LSDA)相关理论,下一篇介绍判别最大化边界投影(Discriminant Maximum Margin Projections,DMMP)方法。 1、局

机器学习之聚类和降维与度量技术-爱代码爱编程

聚类 聚类任务  “无监督学习”的目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础。  聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个“簇”。通过这样的划分,每个簇可能对应于一些潜在的概念(类别),这些概念对聚类算法而言事先是未知的,聚类过程仅能自动形成簇结构,簇所对应的概念语义由使用者

降维和度量学习-爱代码爱编程

KNN k近邻学习 KNN:近朱者赤。基于与待测样本最近的k个样本的信息进行预测 1NN:最近邻分类器,待测样本标签与之最近的 样本标签一直 给定测试样本x,若与之最近邻样本为z,则最近邻分类器出错的概率为 P (

【高维数据降维】局部线性嵌入LLE-爱代码爱编程

高维数据降维之局部线性嵌入 LLE 高维数据降维是指采用某种映射方法,降低随机变量的数量,例如将数据点从高维空间映射到低维空间中,从而实现维度减少。 降维分为:特征选择 和 特征提取特征选择:是从含有冗余信息以及噪声信息的数据中找出主要变量;特征提取:是去掉原来的数据,生成新的变量,可以寻找数据内部的本质结构特征。 降维的过程是通过对输入的原始数据特

特征提取(降维)和特征选择的参考和笔记_jianuolala的博客-爱代码爱编程

特征降维,从一个维度空间映射到另一个维度空间,特征的维数没有减少,在映射的过程中的特征值也会发生相应的变化。 特征选择是单纯地从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后不改变值,但是选择后的特征维数肯定比选择前小。 特征降维主要特点是通过一个数学变换进行降维,而特征选择就是从众多特征中剔除不重要的特征,从而保留重要的特征

4k star , github上照片转漫画最强项目_python数据开发的博客-爱代码爱编程

最近在网上看到很多美美的实景照片被弄成了漫画,非常惊艳,满满的可爱风。于是去找了下,发现一个照片转漫画的开源项目 - AnimeGANv2。 文末有项目地址,喜欢记得收藏、点赞。 文章目录 简介效果使用方法必要条件

特征选择与降维_特征选择和特征降维-爱代码爱编程

特征选择与降维可以说其本质目的是相同的,首要的一个目的就是为了应对维度灾难。随着以后所需处理的数据越来越大,可以直观的感受到样本的特征数呈现直线性的增长。特征选择与降维就是通过一定的算法来选择更为合适的、更具有代表性的的特征