主流开源深度学习框架简介

本文目录:

一、TensorFlow深度学习框架

二、PyTorch深度学习框架

三、Keras深度学习框架

四、Caffe深度学习框架

五、中国深度学习开源框架状况

六、几种框架的对比

七、其他统计数据


  当下,有许多主流的开源深度学习框架供开发者使用。

  主要包括TensorFlow、PyTorch、Keras、Caffe等。

  下面是对这几种框架的详细介绍和对比:

一、TensorFlow深度学习框架

  TensorFlow(谷歌出品):

  TensorFlow 是最受欢迎和广泛使用的深度学习框架之一。

  TensorFlow是一个由Google Brain团队开发的开源深度学习框架。它允许开发者创建多种机器学习模型,包括卷积神经网络、循环神经网络和深度神经网络等。

  TensorFlow使用数据流图来表示计算图,其中节点表示数学操作,边表示数据流动。使用TensorFlow可以利用GPU和分布式计算来加速训练过程。

  该框架有着广泛的应用场景,包括图像识别、自然语言处理、语音识别、推荐系统等。同时,TensorFlow也有着丰富的社区支持和文档资源,使其容易学习和使用。

  • 适合各种应用,包括计算机视觉、自然语言处理和推荐系统等。
  • 提供了丰富的工具和库,用于构建和训练神经网络模型。
  • 支持静态计算图和动态计算图。可以在图构建阶段进行优化
  • 具有强大的分布式计算能力。
  • 支持多种语言接口,包括Python、C++、Java等
  • 提供了许多高级操作,如自动微分、数据并行性等
  • 易于在各种硬件平台上部署和运行
  • 有强大的社区支持和丰富的文档

  Tensorflow有三种计算图的构建方式:静态计算图,动态计算图,以及Autograph.
  TensorFlow1.0时代,采用的是静态计算图,需要先使用TensorFlow的各种算子创建计算图,再开启一个会话Session,显示执行计算图。

  TensorFlow2.0时代,采用的是动态计算图,即每使用一个算子后,该算子会被动态加入到隐含的默认计算图中立即执行得到结果,而无需开启Session。
TensorFlow2.0默认动态计算图(Eager Excution)
使用动态计算图的好处是方便调试程序。
使用动态计算图的缺点是运行效率相对会低一些。

  如果需要在TensorFlow2.0中使用静态图,可以使用@tf.function装饰器,将普通Python函数转换成对应的TensorFlow计算图构建代码。运行该函数就相当于在TensorFlow1.0中用Session执行代码。
TensorFlow2.0为了确保对老版本tensorflow项目的兼容性,在tf.compat.v1子模块中保留了对TensorFlow1.0静态计算图构建风格的支持。已经不推荐使用了。
tf.Variable在计算图中是一个持续存在的节点,不受作用域的影响,一般的方法是把tf.Variable当做类属性来调用
静态图尽量使用tf.Tensor做参数,tensorflow会根据Python原生数据类型的值不同,而重复创建图,导致速度变慢
静态图tf.Tensor比值比的是tensor的hash值,而不是原本的值
tf自带数学大小函数    
大于    tf.math.greater(a, b)
等于    tf.math.equal(a, b)
小于    tf.math.less(a, b)


使用tf.function构建静态图的方式叫做 Autograph。

TensorFlow深度学习例子

  以下是一个使用TensorFlow保存当前训练模型并在测试集上进行测试的样例代码:
  代码中,我们使用了一个简单的线性模型,并在训练过程中将模型保存到了当前目录下的my_model.ckpt文件中。在训练完成后,我们使用测试集进行了模型的测试,输出了测试集上的损失值。

import tensorflow as tf
import numpy as np

# 初始化数据和标签
train_data = np.random.rand(1000, 10)
train_labels = np.random.rand(1000, 1)
test_data = np.random.rand(200, 10)
test_labels = np.random.rand(200, 1)

# 创建输入占位符和变量
input_ph = tf.placeholder(tf.float32, shape=[None, 10])
labels_ph = tf.placeholder(tf.float32, shape=[None, 1])
weights = tf.Variable(tf.zeros([10, 1]))
bias = tf.Variable(tf.zeros([1]))

# 创建模型和损失函数
output = tf.matmul(input_ph, weights) + bias
loss = tf.reduce_mean(tf.square(output - labels_ph))

# 创建训练操作和初始化操作
train_op = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
init_op = tf.global_variables_initializer()

# 创建Saver对象
saver = tf.train.Saver()

# 训练模型
with tf.Session() as sess:
    sess.run(init_op)
    for i in range(100):
        _, loss_val = sess.run([train_op, loss], feed_dict={input_ph: train_data, labels_ph: train_labels})
        print("Epoch {}: loss = {}".format(i+1, loss_val))

    # 保存模型
    saver.save(sess, "./my_model.ckpt")

    # 在测试集上测试模型
    test_loss_val = sess.run(loss, feed_dict={input_ph: test_data, labels_ph: test_labels})
    print("Test loss = {}".format(test_loss_val))

代码运行结果:

Epoch 1: loss = 0.33758699893951416
Epoch 2: loss = 0.11031775921583176
Epoch 3: loss = 0.09063640236854553
Epoch 4: loss = 0.0888814628124237
Epoch 5: loss = 0.08867537975311279
Epoch 6: loss = 0.08860388398170471
Epoch 7: loss = 0.0885448306798935
Epoch 8: loss = 0.0884876698255539
Epoch 9: loss = 0.0884314551949501
Epoch 10: loss = 0.08837611228227615
Epoch 11: loss = 0.08832161128520966
Epoch 12: loss = 0.08826790004968643
Epoch 13: loss = 0.08821499347686768
Epoch 14: loss = 0.0881628543138504
Epoch 15: loss = 0.08811149001121521
Epoch 16: loss = 0.08806086331605911
Epoch 17: loss = 0.08801095187664032
Epoch 18: loss = 0.08796177059412003
Epoch 19: loss = 0.08791326731443405
Epoch 20: loss = 0.08786546438932419
Epoch 21: loss = 0.08781831711530685
Epoch 22: loss = 0.08777181059122086
Epoch 23: loss = 0.08772596716880798
Epoch 24: loss = 0.08768074214458466
Epoch 25: loss = 0.08763613551855087
Epoch 26: loss = 0.08759212493896484
Epoch 27: loss = 0.08754870295524597
Epoch 28: loss = 0.08750586211681366
Epoch 29: loss = 0.08746359497308731
Epoch 30: loss = 0.08742187172174454
Epoch 31: loss = 0.08738070726394653
Epoch 32: loss = 0.08734006434679031
Epoch 33: loss = 0.08729996532201767
Epoch 34: loss = 0.08726035058498383
Epoch 35: loss = 0.08722126483917236
Epoch 36: loss = 0.0871826633810997
Epoch 37: loss = 0.08714456111192703
Epoch 38: loss = 0.08710692077875137
Epoch 39: loss = 0.08706976473331451
Epoch 40: loss = 0.08703305572271347
Epoch 41: loss = 0.08699680119752884
Epoch 42: loss = 0.08696100115776062
Epoch 43: loss = 0.08692563325166702
Epoch 44: loss = 0.08689068257808685
Epoch 45: loss = 0.0868561640381813
Epoch 46: loss = 0.08682206273078918
Epoch 47: loss = 0.0867883637547493
Epoch 48: loss = 0.08675506711006165
Epoch 49: loss = 0.08672215789556503
Epoch 50: loss = 0.08668963611125946
Epoch 51: loss = 0.08665750920772552
Epoch 52: loss = 0.08662573993206024
Epoch 53: loss = 0.0865943431854248
Epoch 54: loss = 0.08656331896781921
Epoch 55: loss = 0.08653264492750168
Epoch 56: loss = 0.0865023210644722
Epoch 57: loss = 0.08647233247756958
Epoch 58: loss = 0.08644269406795502
Epoch 59: loss = 0.08641338348388672
Epoch 60: loss = 0.08638441562652588
Epoch 61: loss = 0.0863557755947113
Epoch 62: loss = 0.0863274559378624
Epoch 63: loss = 0.08629942685365677
Epoch 64: loss = 0.0862717255949974
Epoch 65: loss = 0.08624432235956192
Epoch 66: loss = 0.0862172394990921
Epoch 67: loss = 0.08619043231010437
Epoch 68: loss = 0.08616391569375992
Epoch 69: loss = 0.08613769710063934
Epoch 70: loss = 0.08611176162958145
Epoch 71: loss = 0.08608610183000565
Epoch 72: loss = 0.08606073260307312
Epoch 73: loss = 0.08603561669588089
Epoch 74: loss = 0.08601076900959015
Epoch 75: loss = 0.08598621189594269
Epoch 76: loss = 0.08596190065145493
Epoch 77: loss = 0.08593783527612686
Epoch 78: loss = 0.08591403067111969
Epoch 79: loss = 0.08589048683643341
Epoch 80: loss = 0.08586718887090683
Epoch 81: loss = 0.08584412187337875
Epoch 82: loss = 0.08582130074501038
Epoch 83: loss = 0.0857987329363823
Epoch 84: loss = 0.08577638119459152
Epoch 85: loss = 0.08575427532196045
Epoch 86: loss = 0.08573239296674728
Epoch 87: loss = 0.08571072667837143
Epoch 88: loss = 0.08568929135799408
Epoch 89: loss = 0.08566807210445404
Epoch 90: loss = 0.08564707636833191
Epoch 91: loss = 0.08562628924846649
Epoch 92: loss = 0.08560571074485779
Epoch 93: loss = 0.0855853483080864
Epoch 94: loss = 0.08556520193815231
Epoch 95: loss = 0.08554524928331375
Epoch 96: loss = 0.0855254977941513
Epoch 97: loss = 0.08550594002008438
Epoch 98: loss = 0.08548659086227417
Epoch 99: loss = 0.08546742796897888
Epoch 100: loss = 0.08544846624135971
Test loss = 0.09260907769203186

二、PyTorch深度学习框架

PyTorch(Facebook开源):

  PyTorch 是另一个非常受欢迎的深度学习框架。

  PyTorch是一个由Facebook开源的深度学习框架,是目前市场上最流行的深度学习框架之一。它基于Python语言,提供了强大的GPU加速功能和动态计算图的支持。

  PyTorch的应用范围非常广泛,包括图像和语音识别、自然语言处理、计算机视觉、推荐系统等领域。

  PyTorch具有易于使用、灵活性高和代码可读性好等特点,使得它成为深度学习研究和应用的首选框架之一。

  • 易于在GPU上加速训练,具有出色的 GPU 加速性能。
  • 提供了广泛的预训练模型和工具包,
  • 张量库,用于使用 GPU 和 CPU 进行深度学习。
  • 强调动态计算图的构建,可以更灵活地进行模型调整和调试,使得模型构建和调试更加直观。
  • 它在灵活性和易用性方面表现出色,特别适合研究和原型开发。
  • 具有丰富的工具和库,如Torch方便使用。
  • 提供简洁灵活的API,减少代码编写量
  • 有活跃的社区和详细的文档支持

PyTorch深度学习例子

#使用 PyTorch 张量将三阶多项式拟合到正弦函数。手动实现转发 并向后通过网络:

#使用 PyTorch 张量将三阶多项式拟合到正弦函数。
#手动实现转发 并向后通过网络:

# -*- coding: utf-8 -*-

import torch
import math


dtype = torch.float
device = torch.device("cpu")
# device = torch.device("cuda:0") # Uncomment this to run on GPU

# Create random input and output data
x = torch.linspace(-math.pi, math.pi, 2000, device=device, dtype=dtype)
y = torch.sin(x)

# Randomly initialize weights
a = torch.randn((), device=device, dtype=dtype)
b = torch.randn((), device=device, dtype=dtype)
c = torch.randn((), device=device, dtype=dtype)
d = torch.randn((), device=device, dtype=dtype)

learning_rate = 1e-6
for t in range(2000):
    # Forward pass: compute predicted y
    y_pred = a + b * x + c * x ** 2 + d * x ** 3

    # Compute and print loss
    loss = (y_pred - y).pow(2).sum().item()
    if t % 100 == 99:
        print(t, loss)

    # Backprop to compute gradients of a, b, c, d with respect to loss
    grad_y_pred = 2.0 * (y_pred - y)
    grad_a = grad_y_pred.sum()
    grad_b = (grad_y_pred * x).sum()
    grad_c = (grad_y_pred * x ** 2).sum()
    grad_d = (grad_y_pred * x ** 3).sum()

    # Update weights using gradient descent
    a -= learning_rate * grad_a
    b -= learning_rate * grad_b
    c -= learning_rate * grad_c
    d -= learning_rate * grad_d


print(f'Result: y = {a.item()} + {b.item()} x + {c.item()} x^2 + {d.item()} x^3')

代码运行结果:

99 2351.4306640625
199 1585.7086181640625
299 1071.2376708984375
399 725.2841796875
499 492.4467468261719
599 335.59881591796875
699 229.84210205078125
799 158.46621704101562
899 110.2466812133789
999 77.63826751708984
1099 55.56399154663086
1199 40.60529327392578
1299 30.45751953125
1399 23.5659236907959
1499 18.880510330200195
1599 15.69140911102295
1699 13.518349647521973
1799 12.035942077636719
1899 11.023494720458984
1999 10.331212043762207
Result: y = 0.030692655593156815 + 0.8315182328224182 x + -0.005294993054121733 x^2 + -0.08974269032478333 x^3

三、Keras深度学习框架

Keras(谷歌):

Keras(谷歌)(最初由François Chollet开发,现在为TensorFlow官方API):

  Keras 是一个易用且功能强大的,用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行。

  Keras 的开发重点是支持快速的实验。能够以最小的时延把你的想法转换为实验结果,是做好研究的关键。

  • Keras支持多个后端引擎,可以在 Tensorflow、Theano、CNTK 等框架上运行。
  • 提供简洁易用的高级API,尤其适合初学者和快速原型设计
  • 具有广泛的模型库、预训练模型和各种工具包,使得模型构建更加高效。
  • 可以无缝切换到TensorFlow,以享受其强大的功能和生态系统
  • 允许简单而快速的原型设计(由于用户友好,高度模块化,可扩展性)。
  • 同时支持卷积神经网络和循环神经网络,以及两者的组合。
  • 在 CPU 和 GPU 上无缝运行。

指导原则

  • 用户友好。 Keras 是为人类而不是为机器设计的 API。它把用户体验放在首要和中心位置。Keras 遵循减少认知困难的最佳实践:它提供一致且简单的 API,将常见用例所需的用户操作数量降至最低,并且在用户错误时提供清晰和可操作的反馈。
  • 模块化。 模型被理解为由独立的、完全可配置的模块构成的序列或图。这些模块可以以尽可能少的限制组装在一起。特别是神经网络层、损失函数、优化器、初始化方法、激活函数、正则化方法,它们都是可以结合起来构建新模型的模块。
  • 易扩展性。 新的模块是很容易添加的(作为新的类和函数),现有的模块已经提供了充足的示例。由于能够轻松地创建可以提高表现力的新模块,Keras 更加适合高级研究。
  • 基于 Python 实现。 Keras 没有特定格式的单独配置文件。模型定义在 Python 代码中,这些代码紧凑,易于调试,并且易于扩展。

四、Caffe深度学习框架

Caffe(伯克利)

  Caffe的全称是Convolutional Architecture for Fast Feature Embedding,意为“用于特征提取的卷积架构”,它是一个清晰、高效的深度学习框架,核心语言是C++。

  Caffe是一种流行的深度学习框架,是由加州大学伯克利分校的研究人员开发的,用于卷积神经网络(CNN)和其他深度学习模型的训练和部署。

  Caffe的主要优点是速度快、易于使用和高度可移植性。

  它已被广泛应用于计算机视觉、自然语言处理和语音识别等领域。

  Caffe还具有一个强大的社区,提供了许多预训练的模型和可视化工具,使用户可以轻松地构建自己的深度学习模型。

  • Caffe 是一个基于 C++ 的深度学习框架,旨在高效地进行卷积运算。
  • 它特别适合计算机视觉任务,并在图像分类和物体检测方面表现出色。
  • Caffe 提供了简单的配置文件来定义网络结构和超参数。
  • 具有高效的 GPU 加速,适合在大规模数据集上训练模型。

五、中国深度学习开源框架状况

  • 中国深度学习开源框架市场形成三强格局

  国际权威数据调研机构IDC发布《中国深度学习框架和平台市场份额,2022H2》报告。报告显示,百度稳居中国深度学习平台市场综合份额第一,领先优势进一步扩大。中国深度学习开源框架市场形成三强格局,框架市场前三份额超过80%。

六、几种框架的对比

几种框架的对比表

  目前最受欢迎的深度学习框架包括TensorFlow、PyTorch和Caffe。

  据市场研究公司O'Reilly发布的《2019年AI和深度学习市场调查报告》显示,TensorFlow是最受欢迎的深度学习框架,有57.2%的受访者使用它。PyTorch紧随其后,有37.1%的受访者使用它。Caffe和Keras也很受欢迎,分别占据了16.2%和13.7%的市场份额。

几种常见的深度学习框架在市场上的占比对比(2021)

TensorFlow:

超40%,

是目前最流行的深度学习框架之一。

PyTorch:

超25%,

由Facebook开发并维护,近年来逐渐受到关注和广泛应用。

Keras:

超10%,

经常与TensorFlow一起使用,提供了一种更简单易用的框架。

Caffe:

约5%,

市场适用于计算机视觉和图像处理等领域。

MXNet:

约5%,

市场由亚马逊开发并维护,适用于大规模分布式深度学习。

这几种框架的主要特点的简单对比表

TensorFlow

PyTorch

Keras

计算图

静态图

动态图

静态图

语言接口

Python、C++、Java等

Python

Python

API

丰富

简洁

简洁

硬件支持

广泛

动态图

有限

社区支持

强大

活跃

活跃

框架

静态图

/动态图

多样化

应用领域

灵活性

与易用性

GPU

加速性能

预训练模型

和工具包

TensorFlow

静态图/动态图

广泛应用

中等

优秀

丰富

PyTorch

动态图

广泛应用

出色

优秀

丰富

Keras

静态图

广泛应用

优秀

出色

丰富

Caffe

静态图

计算机视觉

中等

中等

一般

   需要注意的是,这些框架各有优缺点,并且在不同的应用场景下可能有不同的最佳选择。因此,在选择框架时,建议应根据项目需求和研究方向、编程技能和个人喜好来决定,进行评估和比较,最后选择具体的框架。

七、其他统计数据

   .NET(5+) 用户明年希望使用的前三个选项是 .NET(5+)、.NET MAUI 和 .NET Framework (1.0 - 4.8)。.NET 偏袒性很强 在他们的社区内。

             推荐阅读:

给照片换底色(python+opencv)猫十二分类基于大模型的虚拟数字人__虚拟主播实例

计算机视觉__基本图像操作(显示、读取、保存)直方图(颜色直方图、灰度直方图)直方图均衡化(调节图像亮度、对比度)

 语音识别实战(python代码)(一)

 人工智能基础篇

 计算机视觉基础__图像特征

93d65dbd09604c4a8ed2c01df0eebc38.png

 matplotlib 自带绘图样式效果展示速查(28种,全)

074cd3c255224c5aa21ff18fdc25053c.png

Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(一)

fe88b78e78694570bf2d850ce83b1f69.png

cb4b0d4015404390a7b673a2984d676a.png

立体多层玫瑰绘图源码__玫瑰花python 绘图源码集锦

 Python 3D可视化(一)

 让你的作品更出色——词云Word Cloud的制作方法(基于python,WordCloud,stylecloud)

e84d6708316941d49a79ddd4f7fe5b27.png

938bc5a8bb454a41bfe0d4185da845dc.jpeg

0a4256d5e96d4624bdca36433237080b.png

 python Format()函数的用法___实例详解(一)(全,例多)___各种格式化替换,format对齐打印

 用代码写出浪漫__合集(python、matplotlib、Matlab、java绘制爱心、玫瑰花、前端特效玫瑰、爱心)

python爱心源代码集锦(18款)

dc8796ddccbf4aec98ac5d3e09001348.jpeg

0f09e73712d149ff90f0048a096596c6.png

40e8b4631e2b486bab2a4ebb5bc9f410.png

 Python中Print()函数的用法___实例详解(全,例多)

 Python函数方法实例详解全集(更新中...)

 《 Python List 列表全实例详解系列(一)》__系列总目录、列表概念

09e08f86f127431cbfdfe395aa2f8bc9.png

用代码过中秋,python海龟月饼你要不要尝一口?

 python练习题目录

03ed644f9b1d411ba41c59e0a5bdcc61.png

daecd7067e7c45abb875fc7a1a469f23.png

17b403c4307c4141b8544d02f95ea06c.png

草莓熊python turtle绘图(风车版)附源代码

 ​草莓熊python turtle绘图代码(玫瑰花版)附源代码

 ​草莓熊python绘图(春节版,圣诞倒数雪花版)附源代码

4d9032c9cdf54f5f9193e45e4532898c.png

c5feeb25880d49c085b808bf4e041c86.png

 巴斯光年python turtle绘图__附源代码

皮卡丘python turtle海龟绘图(电力球版)附源代码

80007dbf51944725bf9cf4cfc75c5a13.png

1ab685d264ed4ae5b510dc7fbd0d1e55.jpeg

1750390dd9da4b39938a23ab447c6fb6.jpeg

Node.js (v19.1.0npm 8.19.3) vue.js安装配置教程(超详细)

色彩颜色对照表(一)(16进制、RGB、CMYK、HSV、中英文名)

2023年4月多家权威机构____编程语言排行榜__薪酬状况

aa17177aec9b4e5eb19b5d9675302de8.png

38266b5036414624875447abd5311e4d.png

6824ba7870344be68efb5c5f4e1dbbcf.png

 手机屏幕坏了____怎么把里面的资料导出(18种方法)

【CSDN云IDE】个人使用体验和建议(含超详细操作教程)(python、webGL方向)

 查看jdk安装路径,在windows上实现多个java jdk的共存解决办法,安装java19后终端乱码的解决

vue3 项目搭建教程(基于create-vue,vite,Vite + Vue)

fea225cb9ec14b60b2d1b797dd8278a2.png

bba02a1c4617422c9fbccbf5325850d9.png

37d6aa3e03e241fa8db72ccdfb8f716b.png

2023年春节祝福第二弹——送你一只守护兔,让它温暖每一个你【html5 css3】画会动的小兔子,炫酷充电,字体特

 别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(4套)

SVG实例详解系列(一)(svg概述、位图和矢量图区别(图解)、SVG应用实例)

5d409c8f397a45c986ca2af7b7e725c9.png

6176c4061c72430eb100750af6fc4d0e.png

1f53fb9c6e8b4482813326affe6a82ff.png

【程序人生】卡塔尔世界杯元素python海龟绘图(附源代码),世界杯主题前端特效5个(附源码)HTML+CSS+svg绘制精美彩色闪灯圣诞树,HTML+CSS+Js实时新年时间倒数倒计时(附源代码)

 2023春节祝福系列第一弹(上)(放飞祈福孔明灯,祝福大家身体健康)(附完整源代码及资源免费下载)

fffa2098008b4dc68c00a172f67c538d.png

5218ac5338014f389c21bdf1bfa1c599.png

c6374d75c29942f2aa577ce9c5c2e12b.png

tomcat11、tomcat10 安装配置(Windows环境)(详细图文)

 Tomcat端口配置(详细)

Tomcat 启动闪退问题解决集(八大类详细)

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐