mirror of
https://github.com/openmlsys/openmlsys-zh.git
synced 2026-11-05 23:07:47 +08:00
pass of mlsys position.
This commit is contained in:
@@ -1,39 +1,38 @@
|
||||
## 机器学习系统的需求
|
||||

|
||||

|
||||
:width:`600px`
|
||||
:label:`framework_position`
|
||||
|
||||
为了支持日益增长的机器学习应用,开发者普遍需要依赖机器学习系统(如 :numref:`framework_position`所示)。在设计这种系统的过程中,人们总结出了以下几个设计需求:
|
||||
为了支持日益增长的机器学习应用,开发者需要设计机器学习系统来满足以下需求(如 :numref:`framework_position`所示):
|
||||
|
||||
- **支持多种神经网络:**
|
||||
深度学习的崛起使得神经网络成为了机器学习应用的核心。不同的应用具有多种数据形态和学习目标,因此人们设计出了不同的神经网络,例如,卷积神经网络(Convolutional
|
||||
深度学习的巨大成功使得神经网络成为了机器学习应用的核心。不同的应用需要不同的神经网络,例如,卷积神经网络(Convolutional
|
||||
Neural Networks),图神经网络(Graph Neural
|
||||
Networks),自注意力神经网络(Self-attention Neural
|
||||
Networks)等等。这些不同的神经网络需要一个共同的系统软件来进行开发。
|
||||
Networks)等等。这些神经网络需要一个共同的系统软件来进行开发。
|
||||
|
||||
- **支持自动微分:**
|
||||
神经网络模型的核心计算需求是:系统需要利用数据、标注(Label)和目标损失函数(Loss
|
||||
Function)计算梯度(Gradients),并将梯度用以更新神经网络参数。这其中的挑战是如何让系统对于各式各样的神经网络都能**自动化**推导出梯度的计算方法,这个推导过程往往被称之为自动微分。
|
||||
为了训练神经网络,我们需要利用数据、标注(Label)和目标损失函数(Loss
|
||||
Function)来计算梯度(Gradients)。因此,我们需要一个通用系统**自动化**推导出梯度的计算方法,这个推导过程被称之为自动微分。
|
||||
|
||||
- **支持数据管理和处理:**
|
||||
机器学习的核心是数据,这其中不仅包括训练、评估和测试数据集,还包括训练后产生的模型参数(Checkpoint),以及训练过程中产生的调试数据(Debugging
|
||||
Data)。为了方便这些数据快速导入机器学习框架,我们需要框架本身支持不同类型的数据,以及进行高效的数据处理(如:数据增强和数据清洗)。
|
||||
机器学习的核心是数据。这些数据不仅包括训练、评估和测试数据集,还包括训练后产生的模型参数。因此,我们需要系统本身支持数据读取,存储和预处理(例如,数据增强和数据清洗)。
|
||||
|
||||
- **支持模型的训练和部署:**
|
||||
为了让机器学习模型达到最佳的性能,人们需要使用各种优化方法(例如Mini-Batch
|
||||
SGD和其变种)来迭代计算梯度,最终模型的性能达到令开发者满意的状态(该过程称为训练)。同时,根据应用的要求,训练好的模型也需要部署到各种计算设备中,以提供模型推理服务(Inference)。
|
||||
为了让机器学习模型达到最佳的性能,人们需要使用优化方法(例如,Mini-Batch
|
||||
SGD)来**迭代**计算梯度(这一过程称之为训练)。训练完成后,系统需要将训练好的模型部署推理设备。
|
||||
|
||||
- **高效使用计算加速器:**
|
||||
神经网络的相关计算可以被表达成矩阵计算,而这一类计算可以被计算加速器(如GPU)极大地加速。因此,机器学习框架需要具备高效利用加速器的能力。
|
||||
- **高效使用硬件加速器:**
|
||||
神经网络的相关计算往往通过矩阵计算实现。这一类计算可以被硬件加速器(例如,通用图形处理器-GPU)加速。因此,机器学习系统需要高效利用硬件加速器。
|
||||
|
||||
- **分布式计算:**
|
||||
随着数据量的增大和应用的复杂度上升,人们正设计出与之相对应的大型深度神经网络。这一类神经网络往往需要大量的内存来存储参数。同时它们也需要大量的加速器从而实现计算的加速。因此,机器学习框架需要具备分布式执行的能力。
|
||||
随着训练数据量和神经网络参数量的上升,机器学习系统的内存用量远远超过了单机内存的容量。因此,机器学习框架需要天然具备分布式执行的能力。
|
||||
|
||||
在设计机器学习系统之初,开发者曾尝试通过传统的**神经网络开发库**(如Theano和Caffe)、以及**大数据计算框架**(如Apache
|
||||
在设计机器学习系统之初,开发者曾尝试通过拓展**神经网络开发库**(如Theano和Caffe)和**大数据计算框架**(如Apache
|
||||
Spark和Google
|
||||
Pregel)等方式来达到以上设计目标。可是他们发现(如 :numref:`comparison_of_ml_frameworks`所示),
|
||||
神经网络库虽然提供了神经网络开发、自动微分和加速器的支持,但是其缺乏管理和处理大型数据集、模型部署和分布式执行的能力,使得其无法满足产品级机器学习应用的开发。
|
||||
此外,虽然大数据计算框架具有成熟的分布式执行和数据管理能力,但是其缺乏对神经网络、自动微分和加速器的支持,使得其并不适合开发以神经网络为核心的机器学习应用。因此,业界从头设计出了包括MindSpore、PaddlePaddle、TensorFlow,PyTorch等一系列机器学习框架。
|
||||
Pregel)来达到以上目标。可是他们发现(如 :numref:`comparison_of_ml_frameworks`所示),
|
||||
神经网络库虽然提供了神经网络开发、自动微分和加速器的支持,但是其缺乏管理和处理大型数据集、模型部署和分布式执行的能力,无法满足产品级机器学习应用的开发任务。
|
||||
另一方面,虽然大数据计算框架具有成熟的分布式执行和数据管理能力,但是其缺乏对神经网络、自动微分和加速器的支持,使得其并不适合开发以神经网络为核心的机器学习应用。因此,业界从头开始,设计出了包括MindSpore、PaddlePaddle、TensorFlow,PyTorch等一系列机器学习框架。
|
||||
|
||||
:机器学习框架和相关系统的比较
|
||||
|
||||
|
||||
BIN
img/ch01/framework_position.png
Normal file
BIN
img/ch01/framework_position.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 174 KiB |
@@ -1,270 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
xml:space="preserve"
|
||||
width="601.33331"
|
||||
height="461.33334"
|
||||
viewBox="0 0 601.33331 461.33334"
|
||||
sodipodi:docname="framework_position.svg"
|
||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||
id="defs6"><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath18"><path
|
||||
d="M 0,0.1818173 H 450.9818 V 346.00002 l -450.9818,0 z"
|
||||
id="path16" /></clipPath></defs><sodipodi:namedview
|
||||
id="namedview4"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.1020443"
|
||||
inkscape:cx="232.74926"
|
||||
inkscape:cy="263.14732"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1137"
|
||||
inkscape:window-x="1912"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g22" /><g
|
||||
id="g8"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="framework-position"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,0,461.33333)"><g
|
||||
id="g10" /><g
|
||||
id="g22"><g
|
||||
id="g26"
|
||||
transform="matrix(7.874016e-5,0,0,-7.874016e-5,1.072749,305)"><path
|
||||
d="M 0,0 H 958734 V 1064029 H 0 Z"
|
||||
style="fill:none;stroke:#000000;stroke-width:19050;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path28" /></g><g
|
||||
id="g30"
|
||||
transform="matrix(0.2181818,0,0,0.2181818,11.7288,-77.49089)"><text
|
||||
transform="matrix(1,0,0,-1,0,1585)"
|
||||
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="text34"><tspan
|
||||
x="0"
|
||||
sodipodi:role="line"
|
||||
id="tspan32"
|
||||
y="0">自然语</tspan></text></g><g
|
||||
id="g36"
|
||||
transform="matrix(0.2181818,0,0,0.2181818,11.7288,-99.09089)"><text
|
||||
transform="matrix(1,0,0,-1,0,1585)"
|
||||
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="text40"><tspan
|
||||
x="0"
|
||||
sodipodi:role="line"
|
||||
id="tspan38"
|
||||
y="0">言处理</tspan></text></g><path
|
||||
d="M 1.072749,196.7818 H 449 V 112.3454 H 1.072749 Z"
|
||||
style="fill:#deebf7;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path42" /><g
|
||||
id="g44"
|
||||
transform="matrix(7.874016e-5,0,0,-7.874016e-5,1.072749,196.7818)"><path
|
||||
d="M 0,0 H 5688676 V 1072342 H 0 Z"
|
||||
style="fill:none;stroke:#000000;stroke-width:19050;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path46" /></g><g
|
||||
id="g48"
|
||||
transform="matrix(0.2181818,0,0,0.2181818,170.9274,-185.9273)"><text
|
||||
transform="matrix(1,0,0,-1,0,1585)"
|
||||
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="text52"><tspan
|
||||
x="0 82.501991 165.00398 247.50597 330.00797 412.50995"
|
||||
y="0"
|
||||
sodipodi:role="line"
|
||||
id="tspan50">机器学习框架</tspan></text></g><g
|
||||
id="g54"
|
||||
transform="matrix(0.2181818,0,0,0.2181818,69.67742,-207.5273)"><text
|
||||
transform="scale(1,-1)"
|
||||
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="text58"
|
||||
x="-103.12501"
|
||||
y="-1585"><tspan
|
||||
x="-103.12501"
|
||||
y="-1585"
|
||||
id="tspan56">(</tspan></text></g><g
|
||||
id="g60"
|
||||
transform="matrix(0.2181818,0,0,0.2181818,53.92742,-207.5273)"><text
|
||||
transform="matrix(1,0,0,-1,0,1585)"
|
||||
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="text64"><tspan
|
||||
x="0 82.501991 165.00398"
|
||||
y="0"
|
||||
sodipodi:role="line"
|
||||
id="tspan62">例如:</tspan></text></g><g
|
||||
id="g66"
|
||||
transform="matrix(0.2181818,0,0,0.2181818,106.4274,-207.5273)"><text
|
||||
transform="scale(1,-1)"
|
||||
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="text70"
|
||||
x="-40.549644"
|
||||
y="-1581.8807"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan68"
|
||||
x="-40.549644"
|
||||
y="-1581.8807">TensorFlow,PyTorch,MindSpore</tspan></text></g><g
|
||||
id="g72"
|
||||
transform="matrix(0.2181818,0,0,0.2181818,224.3024,-207.5273)"><text
|
||||
transform="matrix(1,0,0,-1,0,1585)"
|
||||
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="text76"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan74"
|
||||
x="0"
|
||||
y="0" /></text></g><g
|
||||
id="g78"
|
||||
transform="matrix(0.2181818,0,0,0.2181818,285.9274,-207.5273)"><text
|
||||
transform="matrix(1,0,0,-1,0,1585)"
|
||||
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="text82"><tspan
|
||||
x="0"
|
||||
y="0"
|
||||
id="tspan80" /></text></g><g
|
||||
id="g84"
|
||||
transform="matrix(0.2181818,0,0,0.2181818,294.4274,-207.5273)"><text
|
||||
transform="matrix(1,0,0,-1,0,1585)"
|
||||
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="text88"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan86"
|
||||
x="0"
|
||||
y="0" /></text></g><g
|
||||
id="g90"
|
||||
transform="matrix(0.2181818,0,0,0.2181818,377.9274,-207.5273)"><text
|
||||
transform="matrix(1,0,0,-1,0,1585)"
|
||||
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="text94"><tspan
|
||||
x="0"
|
||||
y="0"
|
||||
id="tspan92">)</tspan></text></g><g
|
||||
id="g98"
|
||||
transform="matrix(7.874016e-5,0,0,-7.874016e-5,1.072749,85.50905)"><path
|
||||
d="M 0,0 H 5688676 V 1075112 H 0 Z"
|
||||
style="fill:none;stroke:#000000;stroke-width:19050;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path100" /></g><g
|
||||
id="g102"
|
||||
transform="matrix(0.2181818,0,0,0.2181818,179.9274,-297.4182)"><text
|
||||
transform="matrix(1,0,0,-1,0,1585)"
|
||||
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="text106"><tspan
|
||||
x="0"
|
||||
y="0"
|
||||
id="tspan104">异</tspan></text></g><g
|
||||
id="g108"
|
||||
transform="matrix(0.2181818,0,0,0.2181818,197.9274,-297.4182)"><text
|
||||
transform="matrix(1,0,0,-1,0,1585)"
|
||||
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="text112"><tspan
|
||||
x="0"
|
||||
y="0"
|
||||
id="tspan110">构</tspan></text></g><g
|
||||
id="g114"
|
||||
transform="matrix(0.2181818,0,0,0.2181818,215.9274,-297.4182)"><text
|
||||
transform="matrix(1,0,0,-1,0,1585)"
|
||||
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="text118"><tspan
|
||||
x="0 82.501991 165.00398"
|
||||
y="0"
|
||||
sodipodi:role="line"
|
||||
id="tspan116">处理器</tspan></text></g><g
|
||||
id="g120"
|
||||
transform="matrix(0.2181818,0,0,0.2181818,80.92742,-319.0182)"><text
|
||||
transform="matrix(1,0,0,-1,0,1585)"
|
||||
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="text124"><tspan
|
||||
x="0 82.501991 165.00398 247.50597"
|
||||
y="0"
|
||||
sodipodi:role="line"
|
||||
id="tspan122">(例如:</tspan></text></g><g
|
||||
id="g126"
|
||||
transform="matrix(0.2181818,0,0,0.2181818,152.9274,-319.0182)"><text
|
||||
transform="matrix(1,0,0,-1,0,1585)"
|
||||
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="text130"><tspan
|
||||
x="0"
|
||||
y="0"
|
||||
sodipodi:role="line"
|
||||
id="tspan128">通用</tspan></text></g><g
|
||||
id="g132"
|
||||
transform="matrix(0.2181818,0,0,0.2181818,188.9274,-319.0182)"><text
|
||||
transform="matrix(1,0,0,-1,0,1585)"
|
||||
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="text136"><tspan
|
||||
x="0 82.501991 165.00398 247.50597 330.00797 412.50995 495.01193 577.51392 660.01593 742.51788"
|
||||
y="0"
|
||||
sodipodi:role="line"
|
||||
id="tspan134">处理器和计算加速器)</tspan></text></g><g
|
||||
id="g140"
|
||||
transform="matrix(7.874016e-5,0,0,-7.874016e-5,88.12724,305)"><path
|
||||
d="M 0,0 H 958735 V 1064029 H 0 Z"
|
||||
style="fill:none;stroke:#000000;stroke-width:19050;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path142" /></g><g
|
||||
id="g144"
|
||||
transform="matrix(0.2181818,0,0,0.2181818,98.79257,-77.49089)"><text
|
||||
transform="matrix(1,0,0,-1,0,1585)"
|
||||
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="text148"><tspan
|
||||
x="0 82.501991 165.00398"
|
||||
y="0"
|
||||
sodipodi:role="line"
|
||||
id="tspan146">计算机</tspan></text></g><g
|
||||
id="g150"
|
||||
transform="matrix(0.2181818,0,0,0.2181818,107.7926,-99.09089)"><text
|
||||
transform="matrix(1,0,0,-1,0,1585)"
|
||||
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="text154"><tspan
|
||||
x="0 82.501991"
|
||||
y="0"
|
||||
sodipodi:role="line"
|
||||
id="tspan152">视觉</tspan></text></g><g
|
||||
id="g158"
|
||||
transform="matrix(7.874016e-5,0,0,-7.874016e-5,175.1818,305)"><path
|
||||
d="M 0,0 H 958735 V 1064029 H 0 Z"
|
||||
style="fill:none;stroke:#000000;stroke-width:19050;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path160" /></g><g
|
||||
id="g162"
|
||||
transform="matrix(0.2181818,0,0,0.2181818,185.8564,-88.1818)"><text
|
||||
transform="matrix(1,0,0,-1,0,1585)"
|
||||
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="text166"><tspan
|
||||
x="0 82.501991"
|
||||
y="0"
|
||||
sodipodi:role="line"
|
||||
id="tspan164">机器人</tspan></text></g><g
|
||||
id="g170"
|
||||
transform="matrix(7.874016e-5,0,0,-7.874016e-5,359.3272,305)"><path
|
||||
d="M 0,0 H 1138844 V 1064029 H 0 Z"
|
||||
style="fill:none;stroke:#000000;stroke-width:19050;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path172" /></g><g
|
||||
id="g174"
|
||||
transform="matrix(0.2181818,0,0,0.2181818,368.007,-88.1818)"><text
|
||||
transform="matrix(1,0,0,-1,0,1585)"
|
||||
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="text178"><tspan
|
||||
x="0 82.501991 165.00398 247.50597"
|
||||
y="0"
|
||||
sodipodi:role="line"
|
||||
id="tspan176">推荐系统</tspan></text></g><g
|
||||
id="g180"
|
||||
transform="matrix(7.874016e-5,0,0,-7.874016e-5,269.7636,263)"><path
|
||||
d="M 0,0 865414,1"
|
||||
style="fill:none;stroke:#000000;stroke-width:28575;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:8;stroke-dasharray:28575, 28575;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path182" /></g><g
|
||||
id="g184"
|
||||
transform="matrix(0.2181818,0,0,0.2181818,158.6047,-22.07271)"><text
|
||||
transform="matrix(1,0,0,-1,0,1585)"
|
||||
style="font-variant:normal;font-weight:normal;font-size:83px;font-family:STSongti-SC;-inkscape-font-specification:STSongti-SC-Regular;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="text188"><tspan
|
||||
x="0 82.501991 165.00398 247.50597 330.00797"
|
||||
y="0"
|
||||
sodipodi:role="line"
|
||||
id="tspan186">机器学习应用</tspan></text></g></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 15 KiB |
Reference in New Issue
Block a user