python深度学习算法实践——神经网络的前向处理

神经网络前向处理代码学习

本项目基于mnist手写文字数据集。MNIST是一个著名的手写数字数据集,由Yann LeCun, Corinna Cortes和Chris Burges创建,包含60,000个训练样本和10,000个测试样本,每个样本都是28x28像素的手写数字图像。这些图像已经被归一化,并且数字居中显示在固定大小的图像中
。MNIST数据集是机器学习和深度学习领域中用来测试算法效果的标准数据集,例如线性分类器、K-近邻算法、支持向量机、神经网络和卷积神经网络等

导入必要的库

# coding: utf-8
import os
import struct
import pickle
import numpy as np
import matplotlib.pylab as plt
import tkinter as tk
from tkinter import filedialog
from PIL import Image

定义sigmoid函数,激活函数

def sigmoid(self, x):
    return 1 / (1 + np.exp(-x))   

定义softmax函数,输出层激活函数

def softmax(self, x):
    if x.ndim == 2:
        x = x.T
        x = x - np.max(x, axis=0)
        y = np.exp(x) / np.sum(np.exp(x), axis=0)
        return y.T 

    x = x - np.max(x) # 溢出对策
    return np.exp(x) / np.sum(np.exp(x))  

读取minst数据集中的数据

def load_mnist(self, kind='train'): # kind是train或test
    path = self.minstpath
    labels_path = os.path.join(path, '%s-labels.idx1-ubyte' % kind) # 标签文件路径
    images_path = os.path.join(path, '%s-images.idx3-ubyte' % kind) # 图像文件路径
    with open(labels_path, 'rb') as lbpath:
        magic, n = struct.unpack('>II', lbpath.read(8)) # 读取文件头
        labels = np.fromfile(lbpath, dtype=np.uint8) # 读取标签

    with open(images_path, 'rb') as imgpath:
        magic, num, rows, cols = struct.unpack('>IIII', imgpath.read(16)) # 读取文件头
        images = np.fromfile(imgpath, dtype=np.uint8).reshape(len(labels), 784) # 读取图像并转换为784维向量
    return images, labels

前向处理

输入信号——>权重+偏置——>激活函数——>权重+偏置——>激活函数——>输出层激活函数——>输出

def predict(self, x):
    W1, W2, W3 = self.params["w1"], self.params["w2"], self.params["w3"]
    b1, b2, b3 = self.params["b1"], self.params["b2"], self.params["b3"]
    a1 = np.dot(x, W1) + b1
    z1 = self.sigmoid(a1)
    a2 = np.dot(z1, W2) + b2
    z2 = self.sigmoid(a2)
    a3 = np.dot(z2, W3) + b3
    y = self.softmax(a3)
    return y  

main

if __name__ == "__main__":
    root = tk.Tk()
    root.withdraw() # 隐藏主窗口
    # 选择包含数据库的文件夹
    folder_selected = filedialog.askdirectory() # 打开文件夹选择对话框
    print("选择的文件夹路径:", folder_selected)
    # 选择包含模型权重参数的文件
    file_selected = filedialog.askopenfilename() # 打开文件选择对话框
    print("选择的文件路径:", file_selected)
    
    my_predect = Predict_num(minstpath=folder_selected, pklpath=file_selected)
    images, labels = my_predect.load_mnist(kind='train')
    # 显示待预测的图片
    random_num = np.random.randint(0, images.shape[0])
    img = images[random_num]
    img_show = np.array(img).reshape(28, 28)
    pil_img = Image.fromarray(np.uint8(img_show))
    pil_img.show()
    print("预测结果:", np.argmax(my_predect.predict(img)))
    print("实际结果:", labels[random_num])

数据集和代码已打包,公众号“逃离小星球”发送关键词“前向处理”自取,感谢支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逃离小星球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值