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

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: 文言编程语言/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

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
16天前
|
Linux 开发工具 Android开发
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
ijkplayer是由Bilibili基于FFmpeg3.4研发并开源的播放器,适用于Android和iOS,支持本地视频及网络流媒体播放。本文详细介绍如何在新版Android Studio中导入并使用ijkplayer库,包括Gradle版本及配置更新、导入编译好的so文件以及添加直播链接播放代码等步骤,帮助开发者顺利进行App调试与开发。更多FFmpeg开发知识可参考《FFmpeg开发实战:从零基础到短视频上线》。
77 2
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
|
15天前
|
机器学习/深度学习 自然语言处理 搜索推荐
深度学习的魔法:如何用神经网络解决复杂问题
在这篇文章中,我们将探讨深度学习的基本原理和它在各种领域中的应用。通过一些实际的例子,我们将看到深度学习如何帮助我们解决复杂的问题,如图像识别、自然语言处理和推荐系统等。我们还将讨论一些最新的研究成果和技术趋势,以及深度学习在未来可能面临的挑战和机遇。
|
10天前
|
机器学习/深度学习 搜索推荐 安全
深度学习之社交网络中的社区检测
在社交网络分析中,社区检测是一项核心任务,旨在将网络中的节点(用户)划分为具有高内部连接密度且相对独立的子群。基于深度学习的社区检测方法,通过捕获复杂的网络结构信息和节点特征,在传统方法基础上实现了更准确、更具鲁棒性的社区划分。
25 7
|
11天前
|
机器学习/深度学习 自然语言处理 TensorFlow
深度学习的奥秘:探索神经网络背后的魔法
【10月更文挑战第22天】本文将带你走进深度学习的世界,揭示神经网络背后的神秘面纱。我们将一起探讨深度学习的基本原理,以及如何通过编程实现一个简单的神经网络。无论你是初学者还是有一定基础的学习者,这篇文章都将为你提供有价值的信息和启示。让我们一起踏上这段奇妙的旅程吧!
|
11天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
31 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
12天前
|
机器学习/深度学习 人工智能 自动驾驶
深度学习中的卷积神经网络(CNN)及其应用
【10月更文挑战第21天】本文旨在深入探讨深度学习领域的核心组成部分——卷积神经网络(CNN)。通过分析CNN的基本结构、工作原理以及在图像识别、语音处理等领域的广泛应用,我们不仅能够理解其背后的技术原理,还能把握其在现实世界问题解决中的强大能力。文章将用浅显的语言和生动的例子带领读者一步步走进CNN的世界,揭示这一技术如何改变我们的生活和工作方式。
|
19天前
|
机器学习/深度学习 人工智能 监控
深入理解深度学习中的卷积神经网络(CNN):从原理到实践
【10月更文挑战第14天】深入理解深度学习中的卷积神经网络(CNN):从原理到实践
57 1
|
20天前
|
机器学习/深度学习 算法 数据挖掘
【深度学习】经典的深度学习模型-02 ImageNet夺冠之作: 神经网络AlexNet
【深度学习】经典的深度学习模型-02 ImageNet夺冠之作: 神经网络AlexNet
25 2
|
1天前
|
机器学习/深度学习 人工智能 TensorFlow
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【10月更文挑战第32天】本文将介绍深度学习中的一个重要分支——卷积神经网络(CNN),以及其在图像识别领域的应用。我们将通过一个简单的代码示例,展示如何使用Python和TensorFlow库构建一个基本的CNN模型,并对其进行训练和测试。
|
7天前
|
机器学习/深度学习 自然语言处理 TensorFlow
深度学习中的卷积神经网络(CNN)及其应用
【10月更文挑战第26天】在这篇文章中,我们将深入探讨卷积神经网络(CNN)的基本原理、结构和应用。CNN是深度学习领域的一个重要分支,广泛应用于图像识别、语音处理等领域。我们将通过代码示例和实际应用案例,帮助读者更好地理解CNN的概念和应用。