numpy【极简】神经网络

从零手写神经网络:激活函数、反向传播与权重初始化实操 神经网络的核心在于信号如何通过激活函数实现非线性变换,以及反向传播如何依据损失函数逐层校准权重。理解这一能量流动与梯度纠错机制,是突破调参玄学、构建可解释模型的基础能力。本文聚焦二分类任务,以同心圆数据为载体,结合Sigmoid激活函数与二元交叉熵损失,手推并实现完整前向/反向传播流程;重点剖析Xavier初始化如何匹配激活函数特性,避免梯度消失,并通过张量维度追踪、中间变量监控等工程技巧,建立对权重更新节奏的直观手感。适合已接触PyTorch但尚未穿透底层机制的学习者。 阅读详情

极简神经网络

在这里插入图片描述

import numpy as np
np.random.seed(0)


def sigmoid(x, deriv=False):
    if deriv:  # 导数
        return x * (1 - x)  # S'(x) = S(x) (1 - S(x))
    return 1 / (1 + np.exp(-x))


# 样本
X = np.array([[0, 0, 1],
              [0, 1, 1],
              [1, 0, 1],
              [1, 1, 1],
              [0, 1, 0]])  # 5*3
y = np.array([[0],
              [1],
              [1],
              [1],
              [0]])  # 5*1

# 初始化权重系数(随机)
n = 4  # 神经元个数
d = X.shape[1]  # dimensionality
w1 = np.random.random((d, n))  # Weight1
w2 = np.random.random((n, 1))  # Weight2
# 训练
for j in range(99999):
    l1 = sigmoid(np.dot(X, w1))  # Layer1
    l2 = sigmoid(np.dot(l1, w2))  # Layer2

    l2_error = y - l2
    l2_delta = l2_error * sigmoid(l2, deriv=True)  # △Layer2
    if j % 9999 == 0:
        print('Error:%f' % np.mean(np.abs(l2_error)))

    l1_error = l2_delta.dot(w2.T)
    l1_delta = l1_error * sigmoid(l1, deriv=True)  # △Layer1

    w2 += l1.T.dot(l2_delta)
    w1 += X.T.dot(l1_delta)

参数更新原理

在这里插入图片描述

封装成类

import numpy as np, matplotlib.pyplot as mp
from sklearn.datasets import make_blobs, make_moons, make_circles
from sklearn.model_selection import train_test_split
np.random.seed(0)


class NN:
    """Neural Netword"""
    def __init__(self, n):
        self.n = n  # 神经元个数
        self.w1 = None  # Weight1
        self.w2 = None  # Weight2

    def sigmoid(self, x, deriv=False):
        if deriv:
            return x * (1 - x)
        return 1 / (1 + np.exp(-x))

    def fit(self, X, y):
        y = y.reshape(-1, 1)
        d = X.shape[1]

        w1 = 2 * np.random.random((d, self.n)) - 1
        w2 = 2 * np.random.random((self.n, 1)) - 1

        for j in range(99999):
            l1 = self.sigmoid(np.dot(X, w1))
            l2 = self.sigmoid(np.dot(l1, w2))

            l2_error = y - l2
            l2_delta = l2_error * self.sigmoid(l2, deriv=True)

            l1_error = l2_delta.dot(w2.T)
            l1_delta = l1_error * self.sigmoid(l1, deriv=True)

            w2 += l1.T.dot(l2_delta)
            w1 += X.T.dot(l1_delta)

        self.w1 = w1
        self.w2 = w2

    def predict(self, X):
        l1 = self.sigmoid(np.dot(X, self.w1))
        l2 = self.sigmoid(np.dot(l1, self.w2))
        return np.round(l2)

    def score(self, X, y):
        y_predict = self.predict(X).reshape(-1)
        return np.mean(y_predict == y)


def visualization(X1, X2, y1, y2, i):
    mp.subplot(2, 3, i)
    mp.scatter(X1[:, 0], X1[:, 1], c=y1, alpha=0.1)
    mp.scatter(X2[:, 0], X2[:, 1], s=9, c=y2)
    mp.xticks(())
    mp.yticks(())


# 创建样本集
n_samples = 400
samples = [make_blobs(n_samples, centers=2),
           make_moons(n_samples, noise=0.05),
           make_circles(n_samples, noise=.1, factor=.3)]

for i in range(3):
    # 样本
    X, y = samples[i]
    X_train, X_test, y_train, y_test = train_test_split(X, y)
    visualization(X_train, X_test, y_train, y_test, i + 1)
    # 神经网络
    nn = NN(5)
    nn.fit(X_train, y_train)
    y_predict = nn.predict(X_test).reshape(-1)
    visualization(X_train, X_test, y_train, y_predict, i + 4)
    print('Precision: %.2f' % nn.score(X_test, y_test))
mp.show()

在这里插入图片描述
如图示,简单的神经网络可以完成分类任务,但分类效果一般(尤其是线性不可分的数据)
对此可引入ReLU,详情猛戳Python手写非线性神经网络

picoGPT: 一个极简的GPT-2实现 picoGPT项目展示了如何用最少的代码捕捉复杂AI模型的精髓。它不仅是一个技术演示,更是一个学习工具,帮助人们深入理解GPT-2等大型语言模型的工作原理。尽管它可能不适合生产环境,但在教育和研究领域,picoGPT无疑是一个宝贵的资源。对于那些想要深入了解GPT-2内部工作原理的开发者和研究者来说,picoGPT提供了一个绝佳的起点。它证明了,有时候,最简单的实现可以带来最深刻的洞察。文章链接; 阅读详情

相关推荐

FDTD远场分析实战:从monitor数据到3D远场可视化的完整流程

本文详细介绍了FDTD远场分析的完整流程,从monitor采集的近场数据出发,通过近场-远场变换(NFFFT)生成3D远场可视化结果。文章重点解析了远场转换的物理原理、关键参数设置,并提供了构建稳健数据处理流水线及高级可视化(如3D辐射方向图)的实战脚本与技巧,适用于天线设计与光学器件分析。

weixin_29063035的博客 230

二、一个简单的两层神经网络的实现

目录 一、numpy实现 二、pytorch实现 1、手动求导 2、自动求导 三、torch.nn+torch.optim实现实现 1、torch.nn实现自动求导 2、optim选择并执行各种优化方法 3、继承torch.nn.Module类封装模型 四、模型优化效果差原因 一、numpy实现 用numpy写两层神经网络:一个全连接层,一个relu激活函数,没有bias,用x预测y,使用L2 Loss。意味着只有一个隐藏层。 ℎ=????1????+????1h=W1X+B1

zcsdn1996的博客 2728

基于Python的闲鱼商品价格评估模型:爬虫+价格预测全实现

本文介绍了一个完整的全球气候数据抓取与分析流程,采用轻量化的技术栈(requests+pandas+matplotlib+folium),实现以下核心功能: 全球城市定向抓取:支持自定义城市列表,自动获取经纬度并抓取多源气候数据 双数据源互补:结合OpenWeatherMap API(实时数据)和Climate-Data.org(历史数据) 全维度覆盖:采集气温、降水、湿度等核心指标,并进行自动化清洗转换 丰富可视化:生成热力图、趋势图和统计图表,支持地理定位展示 灵活扩展:模块化设计便于新增城市或扩展数据

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 3052

神经网络极简入门

本文中的的神经网络示例是为了介绍神经网络的一些基本概念,所以对神经网络做了尽可能的简化,为了方便去手工实现。而实际环境中的神经网络,不仅神经元的个数,隐藏层的数量极其庞大,而且其计算和训练的方式也很复杂,手工去实现不太可能,一般会借助TensorFlowKeras和PyTorch等等知名的python深度学习库来帮助我们实现。wang_yb引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构。

sdgfafg_25的博客 1966

codevs 1620 轮船问题 DP 解题报告

某国家被一条河划分为南北两部分,在南岸和北岸总共有N对城市,每一城市在对岸都有唯一的友好城市,任何两个城市都没有相同的友好城市。

Hawo11的博客 819

【黑马点评优化】2-Canel实现多级缓存(Redis+Caffeine)同步

【黑马点评优化】2-Canel实现多级缓存(Redis+Caffeine)同步

m0_52031708的博客 3857

探索精简神经网络的力量:Tinn,一个仅200行代码的C语言库

![Tinn Logo](img/logo.PNG) 在追求效率和轻量化的时代,我们很高兴向您介绍Tinn(Tiny Neural Network),一个基于C99标准,只有200行代码且无依赖的神经网络库。这个小而强大的工具由C99或C++98编译器支持,不仅适用于桌面平台,还能在嵌入式系统中大显身手。 ## 项目介绍 Tinn的设计理念是简洁与实用。它提供了一个简单的Sigmoid激活函...

gitblog_00099的博客 580

Zookeeper+Hadoop+Spark+Flink+Kafka+Hbase+Hive 完全分布式高可用集群搭建(保姆级超详细含图文) 附安装包网盘下载

Hadoop+Spark+Flink+Zookeeper+Kafka+Hbase+Hive完全分布式高可用集群搭建 Hadoop高可用集群搭建 Spark高可用集群搭建 Flink高可用集群搭建 Zookeeper高可用集群搭建 Kafka高可用集群搭建 Hbase高可用集群搭建 Hive高可用集群搭建 mysql搭建 jdk部署 大数据集群环境搭建

Mr.L-OAM的博客 2万+

python正则表达式查找(findall)

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。 注意:match 和 search 是匹配一次 findall 匹配所有。 语法格式为: findall(string[, pos[, endpos]]) 参数: string待匹配的字符串。 pos可选参数,指定字符串的起始位置,默认为 0。 endpos可选参数,指定字符串的结束位置,默认为字符串的长度。 实例 查找字符串中的所有数字: import re pattern = re...

海纳百川的博客 2709

论文工具——写论文好用的绘图工具(甘特图+流程图+网络模型图+泳道图)

* 在写HiFi-GAN论文的代码阅读过程中,我发现仅仅通过文字来描述网络结构,不够详细,所以想绘制出网络结构图,更加具象化的描述出网络结构。想去花了,才发现之前都是通过在线绘图网站画的,费时费力,所以想找一些专门的网站化出比较规范并且高质量的图。一方面是为了方便讲解,提高论文的质量,另外一方面也是为了以后写论文打下良好的基础。 * 这篇文章会根据我以前的画图经验展开,以前是使用绘图软件,手动绘图。后来,看到了其他的方法,但是需要写一些代码,或者需要安装特定的软件,投入成本太大,就没有学。所以,本文分享的工

Blackoutdragon的博客 1万+

改进的U-Net在视网膜血管分割上的应用

为了提高算法在血管边界的分割能力,在编码部分采用全局卷积网络(GCN)和边界细化(BR)替换传统的卷积层;在跳跃连接部分引入改进的位置注意模块(PA)和通道注意模块(CA),目的是增加血管与背景之间的对比度,使网络更好地将血管与背景分割开;此外,为了提高网络的性能,在编码部分的最后一层使用密集卷积网络解决网络过拟合问题,同时为了在一定程度上解决梯度爆炸、梯度消失的问题,在解码部分的每一层使用卷积长短记忆网络提升网络获取特征信息的能力。替换传统的卷积操作来解决血管边界非血管像素误分为血管的问题。

weixin_70923796的博客 784

python 查找正则所有的匹配结果

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34080903的博客 1642

番外篇第3集:多模态运维!让 AI 看懂 Grafana 图表并自动生成巡检报告

文章摘要 《多模态运维:让AI看懂Grafana图表并自动生成巡检报告》介绍了如何利用Qwen2.5-VL多模态模型解决传统运维巡检的痛点。文章指出人工查看Grafana监控图表存在效率低、易漏判、报告编写耗时等问题,提出通过Grafana Render API和多模态AI技术实现自动化巡检方案。 主要内容包括: 环境准备:配置Qwen2.5-VL多模态模型和Grafana访问权限 测试验证:展示模型准确识别图表类型、指标数值和异常趋势的能力 技术实现:封装Grafana截图API客户端,支持面板截图和数据

qq_2937655951的博客 110

numpy【极简】神经网络(非线性)

文章目录

ArYe 842

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Teenygrad完全指南:如何用小于1000行代码构建MNIST训练器

如果你正在寻找一个简单易懂的深度学习框架来入门机器学习,那么**Teenygrad**绝对是你的理想选择!这个极简框架仅用不到1000行Python代码就实现了完整的MNIST手写数字识别训练器,让你能够快速理解深度学习框架的核心原理。本文将为你提供**Teenygrad完整教程**,帮助你从零开始掌握这个**轻量级深度学习框架**。 ## 🚀 Teenygrad是什么?为什么选择它? **

gitblog_00332的博客 1541

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

图卷积网络知识汇总

1.图卷积网络知识汇总:https://mayi1996.top/2019/03/14/%E5%9B%BE%E7%BD%91%E7%BB%9C/ 2.图卷积网络到底怎么做,这是一份极简的Numpy实现: https://www.jiqizhixin.com/articles/2019-02-20-12 3.快速了解GCN: https://blog.youkuaiyun.com/u011537121/...

qq_33772192的博客 492

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【numpy手搓DNN极简版】

本文介绍了一个使用NumPy实现的极简版深度神经网络(DNN)。该网络支持自定义层数结构(如begin(8,4,2)表示输入层8节点、隐藏层4节点、输出层2节点),隐藏层默认使用leaky_relu激活函数,输出层使用sigmoid激活函数。核心算法包括:1)基于矩阵运算的前向传播;2)通过递归实现的链式法则反向传播;3)支持学习率动态调整的梯度下降优化。代码提供完整的训练流程(train())、测试功能(test())以及模型保存/加载功能(save()/load()),示例演示了如何处理8维输入和2维输

I_say_lie的博客 63

别再死记硬背公式了!用Python的NumPy库9行代码带你直观理解BP神经网络

本文通过Python的NumPy库,仅用9行核心代码实现BP神经网络,帮助读者直观理解神经网络的工作原理。文章详细介绍了从初始化到训练的全过程,包括前向传播、反向传播和参数更新,并提供了可视化训练过程和常见问题解决方案,适合实践派学习者快速掌握神经网络核心机制。

weixin_30730053的博客 585

tensorli:最小化GPT-like变压器的实现

tensorli:最小化GPT-like变压器的实现 项目介绍 tensorli是一个极简主义风格的GPT-like变压器的Python实现,它只使用了numpy库(少于650行代码)。这个项目提供了一个类似PyTorch的操作体验,旨在帮助开发者更好地理解神经网络的底层原理,而不是追求高性能的生产级实现。 项目技术分析 tensorli的核心是使用numpy构建的Tensorli对象,这个对象支...

gitblog_00623的博客 792

Teenygrad快速入门:零基础搭建你的第一个卷积神经网络 [特殊字符]

想要快速入门深度学习框架开发?Teenygrad就是你需要的终极解决方案!作为tinygrad的精简版本,这个不到1000行的MNIST训练器让你轻松掌握深度学习框架的核心原理。如果你觉得tinygrad还不够小,那么Teenygrad将是你的完美选择——它保留了90%的核心功能,同时代码量大幅减少,是学习深度学习框架内部机制的绝佳起点。 ## 什么是Teenygrad? 🤔 Teenygr

gitblog_00633的博客 901

Teenygrad代码结构全解析:读懂小于1000行的深度学习框架

Teenygrad是一个超精简的深度学习框架,以"比tinygrad更小巧"为设计理念,整个代码库不足1000行却实现了核心深度学习功能。本文将带你系统梳理Teenygrad的代码架构,掌握这个微型框架的设计精华。 ## 📦 项目核心目录结构 Teenygrad采用极简的目录组织,主要包含三个核心目录: - **teenygrad/**:框架核心实现 - [nn/](https://l

gitblog_00769的博客 885

【第七期赠书活动】11本书,还学不好Python?

亲,戳上面的蓝字关注我们哦!~喜欢本公众号的朋友一定不要忘记置顶本公众号,谢谢~Q:双十一没有活动?双十一不回馈读者?老表:怎么可能,必须有。于是我找到『Pytho...

简说Python的博客 488

numpy【极简】RNN

原文出处:http://iamtrask.github.io/2015/11/15/anyone-can-code-lstm/ 示例为RNN实现二进制加法,用来帮助理解RNN 可以先看原文(RNN原理和源代码),再看本文 源代码比较冗余,下面是精简后的代码 numpy实现【极简】RNN import numpy as np &amp;quot;&amp;quot;&amp;quot;创建训练数据&amp;quot;&amp;quot;&amp;

ArYe 623

APL:极简符号背后的强大计算语言

尽管APL的学习曲线较陡峭,但它在数学、数据分析、金融建模和科学计算领域中仍然具有不可替代的价值。本文将全面介绍APL的历史、特点、语法、应用场景,以及它在现代计算中的地位。在 1960 年代初期发明,最初是为了描述数学和计算概念而设计的符号化记法,后来演变成一种完整的编程语言。随着时间的推移,APL 逐渐被不同的厂商扩展和优化,例如 Dyalog APL、APL2 和 GNU APL,使其更适应现代计算环境。例如,在流体动力学、线性代数和统计建模中,APL 能够大幅减少代码量,同时保持计算效率。

2302_77889694的博客 1694
上一篇: Python 正则表达式 flags 参数
下一篇: 4、matplotlib 坐标轴
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值