吾有一术,名曰炼丹。北大博士生用文言开发深度学习网络,还有Pytorch脚本

本文涉及的产品
简介: 文言编程语言/wenyan-lang火了,GitHub项目已经超过12.7K stars。最近,一位北大博士生似乎找到了wenyan-lang的正确用法——开发深度学习网络,名曰「炼丹」。其代码逻辑清晰、可读性高,真乃神人也。

微信图片_20220107220337.jpg


最近文言编程语言 / wenyan-lang火了——GitHub项目已经超过12.7K Stars。


微信图片_20220107220339.jpg


设计文言编程语言的是CMU大四学生Lingdong Huang,真乃后生可畏!


根据Lingdong同学的介绍,wenyan-lang有以下特点:


  • 符合古汉语语法的自然语言处理程序
  • 可以编译成 JavaScript,Python,或者 Ruby
  • 图灵完备
  • 在线 IDE,即刻体验
  • 通过几个例子快速入门


而且,这个编程语言只包含中文和引用符号「」,所以古人也看得懂 。它的变量定义是这样的:

微信图片_20220107220342.png


语法里基本控制流程判断、循环也一应俱全。wenyan-lang还提供了在线IDE,包括斐波那契数列、快排、汉诺塔等许多例子供参考学习:


微信图片_20220107220344.jpg


现在,有人似乎找到了 wenyan-lang 的正確用法:用文言开发深度学习网络,名曰炼丹


微信图片_20220107220346.jpg


用文言开发深度学习网络,名曰炼丹


用wenyan-lang编写深度学习网络的这位神人是北大学生杨凌波(Lingbo Yang),他于2016年在北京大学获得了数学学士学位,目前正在数字视频编解码技术国家工程实验室攻读博士学位。


我们来看一下构建一个神经网络的“文言”代码:


吾观一书,名曰「火炬心法」  # torch
自「火炬心法」之书 引「炼法」之篇,「备料」之篇,「丹器」之篇
自「火炬心法」之书 引「檀瑟」之器  # tensor
自「火炬心法」之书「备料」之篇 引「料堆」,「料铲」
自「火炬心法」之书「丹器」之篇引「丹炉」之器,「高炉」之器
吾观一书,名曰「火眼金睛」  # torchvision
自「火眼金睛」之书「备料」之篇引「缩放」之术,「中和」之术,「翻转」之术
吾有一术。名曰「川流」。欲行是术。
    必先得一列。曰「诸炉」。列中诸元。皆为「丹炉」。
    吾有一术。名曰「高炉」。欲行是术。
        必先得一「檀瑟」之器。名曰「料」。
            凡「诸炉」中之各「层」。
                施「层」之术于「料」。赋还其身  # x = t(x)
            乃得「料」也。
    乃得「高炉」之术。
是谓「川流」之术也。
批曰。吾人欲炼金丹,需先造丹炉
吾有一丹炉。名曰「八卦炉」。欲造此炉。
    必先得四数。
        曰「入」。其值原应为三。
        曰「类」。其值原应为十。
        曰「料尺」。其值原应为廿八。
        曰「通数」。其值原应为六十有四。
    必先得两爻。
        曰「弃乎」。其值原应为阳。
        曰「归一乎」。其值原应为阳。
    乃造此炉如下。
        造「八卦炉」之「基座」  #super(...,self).__init__()
        吾有两数。曰「前通」。曰「后通」。
        昔之「前通」者。今「通数」是矣。
        昔之「后通」者。今「通数」是矣。
        吾有一列。曰「方炉」。
            充「方炉」以「卷积」之层。其形制如下。
                进口「入」个,出口「后通」个。「核」长宽各七。入料时「镶边」各三。每隔一「步」炼之
            充「方炉」以「池化」之层。其形制如下。
                凡每一进口。取邻域长宽各「二」。采其「均值」。
            充「方炉」以「激活」之层。其形制如下。
                凡入之诸元,取其值与零之大者赋之
            昔之「前通」者,今「后通」是矣。
            乘「后通」以二。
            除「料尺」以二。
            充「方炉」以「卷积」之层。其形制如下。
                进口「前通」个,出口「后通」个。「核」长宽各三。入料时「镶边」各一。每隔一「步」炼之
            充「方炉」以「池化」之层。其形制如下。
                凡每一进口。取邻域长宽各「二」。采其「均值」。
            充「方炉」以「激活」之层。其形制如下。
                凡入之诸元,取其值与零之大者赋之
            除「料尺」以二。
        施「川流」之术于「方炉」。得一「高炉」。名之曰「特征」
        乘「后通」以「料尺」以「料尺」。记之曰「入维」
        吾有一列。曰「线炉」。
            充「线炉」以「线性」之层。其形制如下。
                进口长曰「入维」,出口长曰「类」。批曰。如何添加bias
            若「弃乎」为阳。
                充「线炉」以「阻滞」之层。其功用如下。
                    随缘关闭炉内通道。只留其「半数」。
            若「归一乎」为阳。
                充「线炉」以「归一」之层。其实现如下。
                    凡「入料」中之「物」。皆取幂。得一列。记之曰「概率」
                    施「列和」之数于「概率」之列。得一数。记之曰「幂和」
                    凡「概率」中之「数」。除「数」以「幂和」。批曰。易证「概率」之「列和」为一也
        施「川流」之术于「线炉」。得一「高炉」。名之曰「预测」
    至此。炉乃成。
    此炉有「炼丹术」。欲行是术。必先得一「檀瑟」之器。名曰「入料」。
        乃行「炼丹术」如下。
        观「入料」之形,得一列。名之曰「尺寸」
        若夫「尺寸」之长 不为「四」或 「尺寸」之三 其值不为 廿八:
            警云「「入料与丹炉方圆不合,慎之慎之!」」
        「入料」进「特征」之炉炼之。产物记之曰「中料」
        施「整形」之术于「中料」。
        「中料」进「预测」之炉炼之。产物记之曰「出品」
        乃得「出品」。
    是谓「炼丹术」也。
如此「八卦炉」乃成。


对应的Pytorch脚本如下:


import torch
from torch import nn, optim, data
from torch.data.utils import Dataset, DataLoader
from torch.nn import Module, Sequential
def sequential(*layers):
    def _chain_process(x -> torch.Tensor):
        for l in layers:
            x = l(x)
        return x
    return _chain_process
# We're gonna build a large furnace for alchemic experiments
class BaGuaFurnace(nn.Module):
    def __init__(self, 
        dim=3, class_num=10, im_size=28, nf=64,
        use_dropout=True, use_sigmoid=False):
        super(BaGuaFurnace, self).__init__()
        indim, outdim = dim
        conv = [
            nn.Conv2d(dim, outdim, kernel_size=7, padding=3, stride=1),
            nn.AvgPool2d(stride=2),
            nn.ReLU(),
        ]
        indim, outdim = outdim, outdim * 2
        im_size = im_size // 2
        conv += [
            nn.Conv2d(indim, outdim, kernel_size=3, padding=1, stride=1),
            nn.AvgPool2d(stride=2),
            nn.ReLU(),
        ]
        im_size = im_size // 2
        self.feature = sequential(*conv)
        fc_indim = im_size * im_size * outdim
        fc = [nn.Linear(fc_indim, class_num, use_bias=True)]
        if use_dropout:
            fc += [nn.Dropout(0.5)]
        if use_sigmoid:
            fc += [nn.Sigmoid()]
        self.predict = sequential(*fc)
    def forward(self, in):
        shape = mid.size()
        if len(shape) != 4 or shape[3] != 28:
            raise(Warning('Oi, wrong size!'))
        mid = self.feature(in)
        mid = mid.view(shape[0], -1)
        out = self.predict(mid)
        return out


真乃“洋为中用,古为今用”也,厉害厉害!


围观的小伙伴纷纷献上膝盖:


Very nice! 可读性感觉很好啊,虽然编译不了但是让人一看就知道什么意思

牛皮,逻辑清晰,可读性很高。


感兴趣的同学戳原文链接可前往GitHub页面围观。


wenyan-lang项目:

https://github.com/LingDong-/wenyan-lang

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
2天前
|
机器学习/深度学习 安全 网络安全
数字堡垒的构筑者:网络安全与信息安全的深层剖析构建高效微服务架构:后端开发的新趋势
【4月更文挑战第30天】在信息技术高速发展的今天,构建坚不可摧的数字堡垒已成为个人、企业乃至国家安全的重要组成部分。本文深入探讨网络安全漏洞的本质、加密技术的进展以及提升安全意识的必要性,旨在为读者提供全面的网络安全与信息安全知识框架。通过对网络攻防技术的解析和案例研究,我们揭示了防御策略的关键点,并强调了持续教育在塑造安全文化中的作用。
|
2天前
|
存储 XML 前端开发
【Flutter前端技术开发专栏】Flutter中的网络请求与数据处理
【4月更文挑战第30天】本文介绍了Flutter开发中的网络请求和数据处理。 Flutter开发者可选择http(官方库)或dio(功能更强大)进行网络请求。http库简单易用,dio支持更多功能如拦截器。数据处理涉及JSON和XML解析,数据存储可选SharedPreferences或Hive,数据传递推荐使用InheritedWidget或Provider状态管理库。了解这些知识点能提升Flutter开发效率。
【Flutter前端技术开发专栏】Flutter中的网络请求与数据处理
|
2天前
|
JSON 数据处理 Swift
【Swift 开发专栏】Swift 中的网络编程:URLSession 与 Alamofire
【4月更文挑战第30天】本文探讨了Swift中的网络编程,重点关注URLSession和Alamofire。URLSession是苹果提供的网络请求框架,允许底层控制和定制,适合需要高度灵活性的场景。Alamofire则是在URLSession基础上的第三方库,提供简洁接口和功能扩展,简化网络请求和错误处理。文中还介绍了两者在实际应用中的选择和使用场景,强调掌握网络编程基础的重要性。
|
2天前
|
机器学习/深度学习 算法 安全
深度学习在图像识别中的应用与挑战构建高效可扩展的RESTful API:后端开发的实战指南
【4月更文挑战第30天】 随着计算机视觉技术的飞速发展,深度学习在图像识别领域取得了显著的成果。本文将探讨深度学习技术在图像识别中的应用及其所面临的挑战。首先,我们将介绍深度学习的基本原理和关键技术,然后分析其在图像识别中的优势和应用案例。最后,我们将讨论当前深度学习在图像识别领域所面临的主要挑战和未来的发展趋势。
|
4天前
|
机器学习/深度学习 算法 TensorFlow
TensorFlow 2keras开发深度学习模型实例:多层感知器(MLP),卷积神经网络(CNN)和递归神经网络(RNN)
TensorFlow 2keras开发深度学习模型实例:多层感知器(MLP),卷积神经网络(CNN)和递归神经网络(RNN)
|
15天前
|
机器学习/深度学习 数据可视化 PyTorch
PyTorch小技巧:使用Hook可视化网络层激活(各层输出)
这篇文章将演示如何可视化PyTorch激活层。可视化激活,即模型内各层的输出,对于理解深度神经网络如何处理视觉信息至关重要,这有助于诊断模型行为并激发改进。
15 1
|
20天前
|
数据管理 API 开发工具
Objective-C网络请求开发的高效实现方法与技巧
Objective-C网络请求开发的高效实现方法与技巧
|
24天前
|
网络协议 安全 网络安全
Python网络编程详解:Socket套接字的使用与开发
探索Python网络编程:本文详述Socket套接字,关键组件用于设备间通信。理解Socket类型(TCP/UDP),学习创建、绑定、监听、发送/接收数据步骤。示例展示服务端和客户端实现,及Socket聊天室应用。了解并发处理、错误处理和网络安全。通过学习,提升网络应用开发技能。参考书籍深入学习。
124 2
|
14小时前
|
机器学习/深度学习 传感器 自动驾驶
基于深度学习的图像识别技术在自动驾驶系统中的应用
【5月更文挑战第2天】 随着人工智能技术的飞速发展,深度学习已经成为推动多个科技领域进步的关键力量。特别是在图像识别技术方面,深度学习的应用已经极大地改善了算法的准确性和效率。本文将探讨深度学习在图像识别中的核心机制,并重点分析其在自动驾驶系统中的具体应用,包括车辆检测、行人识别以及交通标志识别等关键技术点。通过综合现有研究成果与最新技术动态,本文旨在为读者提供一个关于如何利用深度学习提升自动驾驶系统性能的全面视角。
|
22小时前
|
机器学习/深度学习 自动驾驶 算法
基于深度学习的图像识别在自动驾驶系统中的应用
【5月更文挑战第2天】 随着人工智能技术的飞速发展,深度学习在图像识别领域取得了突破性进展。这些技术的应用不仅局限于日常的智能设备中,更在自动驾驶系统的发展中扮演着关键角色。本文旨在探讨深度学习算法如何提升自动驾驶汽车的图像识别能力,以及这一进步如何促进自动驾驶系统的整体性能和安全性。通过分析最新的研究成果和实际案例,我们阐述了深度学习模型在处理复杂交通场景中的优势,并讨论了未来可能的发展趋势。