Python+Softmax+MNIST
# -*- coding: utf-8 -*- """ 用神经网络搭建的softmax线性分离器 Softmax是用于分类过程,用来实现多分类的,简单来说,它把一些输出的神经元映射到(0-1)之间的实数,并且归一化保证和为1,从而使得多分类的概率之和也刚好为1。 Softmax可以分为soft和max,max也就是最大值,假设有两个变量a,b。如果a>b,则max为a,反之为b。 那么在分类问题里面,如果只有max,输出的分类结果只有a或者b,是个非黑即白的结果。 但是在现实情况下,我们希望输出的是取到某个分类的概率 我们希望分值大的那一项被经常取到,而分值较小的那一项也有一定的概率偶尔被取到,所以我们就应用到了soft的概念,即最后的输出是每个分类被取到的概率。 """ from keras.datasets import mnist from keras.models import Sequential from keras.layers import Dense,Activation from keras.optimizers import SGD from keras.utils import np_utils import numpy as np ############################################ import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' ########################################### np.random.seed(0) #导入数据 分离成为训练集+标签 和测试集+标签 (X_train,y_train),(X_test,y_test) = mnist.load_data() # 训练集的个数 # 60000 行的训练集分拆为 55000 行的训练集和 5000 行的验证集。 # 每个样本都是一张28 * 28像素的灰度手写数字图片。 print(X_train.shape,y_train.shape) # 测试集的个数 print(X_test.shape,y_test.shape) #数据变换,变为10个类别 nb_classes = 10 X_train_1 = X_train.reshape(60000,784) # 归一化的意思 把所有的数弄到【0,1】之间 X_train_1 = X_train_1/255 print(X_train_1.shape) X_train_1 = X_train_1.astype('float32') # 使用np_utils.to_categorical(y_train, 10)将原来标签是一列的[1,0,0,0,1…]的转换为一行10列的独热码。 y_train_1 = np_utils.to_categorical(y_train,nb_classes) X_test_1 = X_test.reshape(10000,784) X_test_1 = X_test_1.astype('float32') y_test_1 = np_utils.to_categorical(y_test,nb_classes) print(X_test_1.shape,y_test_1.shape) print( '-----变换后的数据结构----->') print(X_train_1.shape) print(y_train_1.shape) print('Success!') #建立模型 model = Sequential() model.add(Dense(nb_classes,input_shape=(784,))) model.add(Activation('softmax')) # 编译模型 # 梯度下降 SGD 每次更新时对每个样本进行梯度更新 sgd = SGD(lr=0.01) # 交叉熵函数 model.compile(loss='binary_crossentropy', optimizer=sgd, metrics = ['accuracy']) #model 概要 model.summary() #训练模型 # X_train_1 输入数据 # y_train_1 标签, # epochs:训练的总轮数 # verbose:日志显示,0为不在标准输出流输出日志信息,1为输出进度条记录,2为每个epoch输出一行记录 # batch_size:整数,指定进行梯度下降时每个batch包含的样本数 # 最终得到模型 modela model.fit(X_train_1,y_train_1, epochs = 20, verbose=1, batch_size=100 ) #模型的测试误差指标 print(model.metrics_names) #对测试数据进行测试 # model.evaluate输入数据(data)和标签(label),然后将预测结果与标签比较,得到两者误差并输出. loss,accu = model.evaluate(X_test_1,y_test_1, verbose=2, batch_size = 100) print(loss,accu)
图片:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?