I built the same model with TensorFlow and PyTorch | Which Framework is better?

Patrick Loeber
24 Apr 202213:33

Summary

TLDRこのビデオでは、ディープラーニングフレームワークであるTensorFlowとPyTorchを比較し、それぞれの長所と短所を探求します。TensorFlowはプロダクションで最も使われており、広範なエコシステムを提供していますが、PyTorchは研究者間で人気があり、最近はGitHubのスター数でもTensorFlowを上回るほど成長しています。ビデオでは、両フレームワークを使って同じ畳み込みニューラルネットを構築し、画像分類を行います。TensorFlowのSequential APIとPyTorchの柔軟性の高いオブジェクト指向アプローチの使い方、トレーニングプロセスの違いについて説明し、最終的なテスト精度を比較します。

Takeaways

  • 🔧 TensorFlowはプロダクションで最も使用されているフレームワークですが、研究者の中ではPyTorchが人気です。
  • 📈 Google Trendsによると、TensorFlowとPyTorchは人気がほぼ同じですが、最近PyTorchが初めてリードしました。
  • 🌟 GitHubのスター数で見ると、TensorFlowはPyTorchの3倍ほど人気があります。
  • 📱 TensorFlow LiteやTensorFlow.jsなど、モバイルやWebアプリケーションのための優れた生態系を提供しています。
  • 🚀 PyTorchはモバイル展開のための新しいPyTorch Liveライブラリなど、プロダクションシステムでも迎頭赶上を図っています。
  • 🎓 このビデオでは、両方のフレームワークで同じ畳み込みニューラルネットを構築し、APIの使い方やトレードオフを学びます。
  • 🌐 TensorFlow 2は2019年にリリースされ、Keras APIをベースにしたシーケンシャルAPIとサブクラスングAPIを提供しています。
  • 📊 PyTorchではデータローダーの使用やモデルのクラスベースの実装など、より詳細なコードを書く必要がありますが、柔軟性があります。
  • 🏋️‍♂️ TensorFlowではモデルのトレーニングは1行で行えますが、PyTorchでは自分でトレーニングループを書く必要があります。
  • 📊 両フレームワークの性能比較では、PyTorchのテスト精度が0.72、TensorFlowのテスト精度が0.69とわずかに優れています。

Q & A

  • ディープラーニングフレームワークの中で、TensorFlowとPyTorchの人気はどのようにですか?

    -TensorFlowはプロダクションで最も使われているフレームワークですが、研究者の中ではPyTorchが人気です。Googleトレンドによると、両者はほぼ同じレベルですが、最近PyTorchが初めてリードしました。

  • GitHubのスター数で比較すると、TensorFlowとPyTorchの人気はどのように変わりますか?

    -GitHubのスター数によると、TensorFlowはPyTorchの3倍ほど人気があり、より多くのスターを獲得しています。

  • TensorFlow LiteやTensorFlow.jsとは何ですか?

    -TensorFlow Liteはモバイルやエッジデバイス向けのプロダクションシステムのためのTensorFlowの軽量版です。TensorFlow.jsはWebアプリケーションのためのTensorFlowのバージョンです。

  • PyTorchがプロダクションシステムで追いつくために取り組んでいる新しいライブラリは何ですか?

    -PyTorch Liveライブラリはモバイル展開において非常に有望な新しいライブラリです。

  • TensorFlow 1とTensorFlow 2の違いは何ですか?

    -TensorFlow 1は2015年にリリースされ、TensorFlow 2は2019年にリリースされ、APIの大幅な改修が行われ、初心者にも親しみやすくなりました。

  • TensorFlow 2のSequential APIとは何ですか?

    -Sequential APIはKeras APIに基づく高レベルAPIで、scikit-learnライブラリに似たインターフェースを提供し、多くの複雑な部分を抽象化します。

  • PyTorchのデータセットをロードする際に必要な変換とは何ですか?

    -PyTorchでは、画像をPyTorchのテンソルに変換し、正規化を適用する変換が必要です。

  • PyTorchでモデルを定義する際に必要なクラスは何ですか?

    -PyTorchでは、モデルはnn.Moduleから継承されたクラスで実装され、initとforwardの2つの関数を実装する必要があります。

  • PyTorchのトレーニングループはどのように構成されますか?

    -PyTorchのトレーニングループでは、エポック数をループし、各エポック内でバッチごとの入力をGPUに送り、モデルを呼び出し、損失を計算し、バックプロパゲーションと最適化器の更新ステップを実行します。

  • TensorFlowとPyTorchのテスト精度を比較するとどのような結果が出ますか?

    -テスト精度を比較すると、PyTorchのテスト精度は0.72で、TensorFlowのテスト精度は0.69でした。トレーニング損失はPyTorchが0.57、TensorFlowが0.61でした。

Outlines

00:00

🤖 ディープラーニングフレームワークの比較:TensorFlowとPyTorch

この段落では、TensorFlowとPyTorchという2つのディープラーニングフレームワークを比較しています。TensorFlowはプロダクションで最も使用されているフレームワークであり、GitHubのスター数で見ると3倍も多くなっています。一方で、PyTorchは研究者の中で最も人気があり、最近GoogleトレンドでもTensorFlowに追いつき、初めてリードしました。TensorFlowはモバイルやエッジデバイス向けのTensorFlow Liteやウェブアプリケーション向けのTensorFlow.jsなど、優れた生態系を提供していますが、PyTorchもモバイル展開に向けて新しいPyTorch Liveライブラリが登場し、プロダクションシステムでも迎頭赶上しています。このビデオでは、両方のフレームワークで同じ畳み込みニューラルネットを構築し、APIの使い方やトレードオフを学ぶことができます。

05:01

🔧 TensorFlowの使い方:初心者向けのSequential API

TensorFlow 2は2019年にリリースされ、APIの大幅な改修が行われ、初心者にもフレンドリーになりました。Sequential APIとサブクラス化APIの2種類がありますが、Sequential APIが人気です。これはKeras APIに基づいており、scikit-learnライブラリと同様の高レベルAPIを提供しています。このセクションでは、TensorFlowのセットアップ、データセットのロード、モデルの構築、コンパイル、トレーニング、評価のプロセスが説明されています。また、TensorFlowはGPUの自動操縦もサポートしており、コード上でGPUの操作を心配する必要はありません。

10:01

🔧 PyTorchの使い方:柔軟性のあるオブジェクト指向アプローチ

PyTorchは2016年にFacebookのAI研究ラボによってリリースされ、科学者や研究者の中で人気を博しました。PyTorchではコードをより多く書く必要がありますが、そのAPIは非常によく設計されており、Pythonicと感じる人もいます。このセクションでは、PyTorchでのデータセットのロード、モデルの構築、トレーニング、評価のプロセスが説明されています。特に、モデルはクラスとして実装され、initとforward関数を実装する必要があります。GPUの使用も自分で管理する必要があります。トレーニングでは、TensorFlowとは異なり、训练ループを自分で書く必要がありますが、これによりカスタマイズが容易になります。

Mindmap

Keywords

💡ディープラーニングフレームワーク

ディープラーニングフレームワークとは、人工知能の分野で特にニューラルネットワークを構築・学習するためのソフトウェアライブラリやツールの総称です。ビデオでは、TensorFlowとPyTorchという2つのフレームワークが比較されていますが、それぞれ異なる特徴を持っており、研究者や開発者のニーズに応じて選択されます。

💡TensorFlow

TensorFlowは、Googleが開発したオープンソースのディープラーニングフレームワークです。ビデオでは、その使いやすさとプロダクションでの幅広い利用が強調されています。また、TensorFlow LiteやTensorFlow.jsなどのエコシステムがモバイルやウェブアプリケーションへの展開をサポートしています。

💡PyTorch

PyTorchは、FacebookのAI研究部門が開発したディープラーニングフレームワークで、研究者の中で人気があります。ビデオでは、そのコードの柔軟性やPythonicなAPIが特徴として触れられており、最近ではプロダクションへの展開にも取り組んでいると説明されています。

💡GitHub stars

GitHub starsは、GitHub上のプロジェクトへの支持や関心を示す方法の一種です。ビデオでは、TensorFlowとPyTorchのGitHub starsを比較して、コミュニティの人気を示す指標として用いられています。

💡プロダクションシステム

プロダクションシステムとは、製品やサービスを顧客に提供するまでのプロセスを指しますが、ビデオでは特にディープラーニングモデルを本番環境で実行するシステムを指しています。TensorFlowはプロダクションでの使用が広く、PyTorchもそれに追随するようになっています。

💡畳み込みニューラルネット

畳み込みニューラルネットは、画像認識などのタスクによく使用されるニューラルネットワークの一種です。ビデオでは、TensorFlowとPyTorchを使って同じ畳み込みニューラルネットを構築し、画像分類タスクを行なっています。

💡データセット

データセットとは、機械学習モデルを訓練させるために使用されるデータの集まりです。ビデオでは、CIFAR-10というデータセットを使用して、モデルの訓練とテストを行い、その性能を評価しています。

💡モデルのコンパイル

モデルのコンパイルとは、ディープラーニングフレームワークにおいて、モデルの学習プロセスを設定する行為を指します。ビデオでは、TensorFlowでモデルをコンパイルする際にオプティマイザや損失関数を指定する必要があると説明されています。

💡モデルの評価

モデルの評価とは、訓練されたディープラーニングモデルが未知のデータに対してどれだけ正確に予測できるかを測るプロセスです。ビデオでは、テストデータセットに対してモデルを評価し、損失と精度を測定しています。

💡GPU

GPUは、画像処理ユニットの略で、高度な画像やデータ処理に特化した計算能力を持つハードウェアです。ビデオでは、TensorFlowは自動的にGPUを利用し、PyTorchでは手動でGPUの使用を管理する必要があると触れられています。

Highlights

TensorFlow是生产环境中使用最广泛的深度学习框架。

PyTorch在研究人员中最受欢迎,与TensorFlow在谷歌趋势上非常接近。

TensorFlow在GitHub上的星星数量是PyTorch的三倍,显示其在生产系统中的流行度。

PyTorch正在努力赶上生产系统,例如新的PyTorch Live库在移动部署方面看起来很有前景。

选择使用哪个框架取决于个人需求,两者都有其优缺点。

视频展示了如何使用两个框架构建相同的卷积神经网络。

TensorFlow 2提供了两种API:Sequential API适合初学者,Subclassing API适合专家。

TensorFlow 2的Sequential API基于Keras API,提供高级API,类似于scikit-learn库。

TensorFlow自动在GPU上执行所有相关操作,无需在代码中担心。

PyTorch要求用户自己管理在正确设备上的操作。

PyTorch的API设计得很好,给人一种更加Pythonic的感觉。

PyTorch提供了更多的灵活性,允许在较低层次上轻松修改代码。

在PyTorch中,每个模型都是通过继承nn.Module类来实现的。

PyTorch训练循环需要更多的代码,但提供了更多的自定义选项。

TensorFlow提供了自动训练和验证数据集分割,而PyTorch需要手动实现。

PyTorch的测试准确率为0.72,而TensorFlow的测试准确率为0.69。

PyTorch的训练损失为0.57,TensorFlow的训练损失为0.61。

两个框架在性能上大致相同,但PyTorch在测试中略胜一筹。

Transcripts

play00:05

which deep learning framework is the

play00:06

best tensorflow is the most used

play00:08

framework in production pytorch is the

play00:11

most popular framework amongst

play00:12

researchers when comparing google trends

play00:14

they are close together tensorflow came

play00:17

out earlier and was much more popular

play00:19

all the time however pytorch recently

play00:21

took the lead here for the very first

play00:23

time based on github stars tensorflow is

play00:25

still much more popular with three times

play00:27

as many stars as torch also in

play00:30

production systems tensorflow is still

play00:32

much more widely used and provides a

play00:34

great ecosystem for example with

play00:36

tensorflow lite for mobile and edge

play00:38

devices or tensorflow.js for web

play00:40

applications however pytorch is trying

play00:43

to catch up in production systems and

play00:45

for example the new pytorch live library

play00:47

looks very promising for mobile

play00:49

deployment so which one should you use

play00:51

as always the answer is not simple and

play00:53

depends on your requirements both

play00:55

frameworks have its pros and cons and

play00:57

both are great so in this video i

play01:00

created the same convolutional neural

play01:02

net with both frameworks in the process

play01:04

you'll learn how to use each framework

play01:06

how the api looks like and hopefully get

play01:08

a better feel for the trade-offs between

play01:10

each of these so in the end you can make

play01:12

the best choice for your next project

play01:14

the neural network we're going to build

play01:16

is a simple convolutional neural net to

play01:18

classify images it consists of multiple

play01:21

convolutional layers followed by linear

play01:23

classification layers and value

play01:25

actuation functions in between we load a

play01:28

data set build and train the model which

play01:30

should have the exact same architecture

play01:32

in both frameworks and then we evaluate

play01:34

the model on a test set so this is what

play01:36

a typical deep learning application

play01:38

looks like if you want to learn more i

play01:40

have free courses for both tensorflow

play01:42

and pythorg on my channel that bring you

play01:44

from beginner to advanced but now

play01:46

without further ado let's get started

play01:49

tensorflow 1 was released in 2015 by

play01:51

google and quickly became a big success

play01:54

in 2019 tensorflow 2 was released which

play01:57

brought a major rework of the api and

play01:59

made it much more beginner friendly

play02:00

tensorflow 2 now offers two different

play02:02

kinds of apis the sequential api suited

play02:05

for beginners and the subclassing api

play02:08

for experts the sequential api is much

play02:10

more popular and this is what we're

play02:12

going to use in this video it's based on

play02:14

the keras api another deep learning

play02:16

library that has been fully integrated

play02:18

into tensorflow 2. it provides a high

play02:20

level api very similar to the

play02:22

scikit-learn library and abstracts away

play02:25

a lot of the difficult stuff so let's

play02:27

see how to use it i use a google call up

play02:29

here so we don't have to worry about

play02:31

installation and get a free gpu as well

play02:33

the first thing to do is to change the

play02:35

runtime type and select gpu since we use

play02:38

a gpu tensorflow automatically performs

play02:41

all relevant operations on the gpu and

play02:43

we don't have to worry about this at all

play02:45

in our code on the other hand later in

play02:48

pytorch you will see that we do have to

play02:50

take care of this ourselves now one

play02:52

thing to note is that some parts of the

play02:54

video are shown with increased speed so

play02:56

it does not represent the actual

play02:58

training time of course but speed is

play03:00

roughly on the same level for both

play03:01

frameworks so let's import all modules

play03:04

we need so here we import tensorflow and

play03:06

a few modules from tensorflow.keras we

play03:08

also use maplotlip to plot some images

play03:11

as dataset we use one of the built-in

play03:13

datasets the cipher10 dataset it

play03:16

consists of colored images of 10

play03:18

different classes loading it

play03:20

automatically gives us training and

play03:21

testing images together with the

play03:23

corresponding labels the only thing we

play03:25

do with it is normalize it to have

play03:27

values between 0 and 1. let's plot the

play03:29

images which can simply be done with

play03:31

matplotlib and here we can see a grid of

play03:34

25 different images now let's build the

play03:36

model this is the architecture we want

play03:38

to build it consists of three

play03:40

convolutional layers with max pooling in

play03:43

between followed by two linear layers

play03:45

for classification in the end and of

play03:47

course we also want actuation functions

play03:49

in between as mentioned before we use

play03:51

the sequential api where we can add all

play03:53

the layers that we want we start by

play03:55

adding a convolutional layer where we

play03:57

define the output size the kernel size

play04:00

for the first layer we also specify the

play04:02

input shape and we can also simply

play04:04

specify an activation function by using

play04:06

the corresponding name as string in this

play04:09

case relu we add the next layer in the

play04:11

same way this time a max pooling layer

play04:14

then let's add two more convolutional

play04:16

and one more max pooling layers after

play04:18

all convolutions we add a flattening

play04:20

layer and then a dense layer again with

play04:23

a relu actuation function a dense layer

play04:26

is simply a fully connected linear layer

play04:28

and at the very end we add another dense

play04:31

layer with 10 outputs for our 10 classes

play04:33

but note that here we don't use an

play04:35

actuation function and instead return

play04:38

the raw values after the final layer

play04:40

before we can use the model we have to

play04:42

call model.compile this needs an

play04:44

optimizer and the loss function for the

play04:47

optimizer we can again simply use a

play04:49

string in this case the adam optimizer

play04:52

for the loss we create an object of

play04:55

categorical cross entropy loss and

play04:58

notice that we use from logits equals

play05:00

true because we don't have an actuation

play05:02

function in the last layer for the

play05:04

optimizer we could also create an actual

play05:07

object to have more control over

play05:09

parameters but we keep it as simple as

play05:11

possible we can also pass in a list of

play05:13

metrics that should be tracked during

play05:15

training like here the accuracy now

play05:17

training is done in one line by calling

play05:19

model.fit with the training images and

play05:22

labels we can specify the number of

play05:24

epochs and by specifying validation

play05:26

split tensorflow automatically splits

play05:29

the training images into training and

play05:31

validation sets for us to have an

play05:33

evaluation on the validation data during

play05:35

training i can already tell you that the

play05:37

whole training won't be as simple as

play05:39

that with pytherg later now we can

play05:41

inspect the loss and accuracy for both

play05:44

training and validation sets let's keep

play05:46

those numbers in mind and compare it

play05:47

later with pytorch the fit method also

play05:50

gave us an history object back which we

play05:52

can use for example to plot the accuracy

play05:55

for all epochs this is another neat

play05:57

feature in tensorflow that attracts

play05:58

these metrics automatically evaluating

play06:01

the model on the test data is another

play06:03

simple one-liner we call model.evalue

play06:06

with the test images and labels and can

play06:08

then print the test loss and test

play06:10

accuracy and that's it before we jump to

play06:12

the pie church code i'd like to give a

play06:14

quick shout out to today's sponsor which

play06:16

is intel intel is helping developers

play06:19

like me build deploy and scale ai

play06:22

solutions with a vast amount of hardware

play06:24

and software tools for example their

play06:26

intel ai software portfolio lets you

play06:28

build upon the existing ai software

play06:31

ecosystem and you can get 10 times or

play06:33

100 times optimizations for popular

play06:35

frameworks like python or tensorflow i

play06:38

also love their one api ai analytics

play06:41

toolkit to get end-to-end performance

play06:43

for ai workloads or the openvino toolkit

play06:46

to deploy high performance inference

play06:48

applications from devices to the cloud

play06:51

their goal is to make it as seamless as

play06:53

possible for everyone so check out their

play06:55

toolkits and resources with the link in

play06:57

the description thanks again so much to

play06:59

intel for sponsoring this video pytorch

play07:01

was first released in 2016 by facebook's

play07:04

ai research lab and quickly became very

play07:07

popular among scientists and researchers

play07:09

it requires you to write more code which

play07:12

you will notice in a moment however its

play07:14

api is very well designed with a lot of

play07:17

people saying it feels more pythonic

play07:19

compared to tensorflow once you know

play07:21

your way around it it allows you to

play07:23

easily modify the code on a lower level

play07:25

and gives you a lot of flexibility while

play07:27

still feeling not too complicated

play07:30

pytorch also comes pre-installed in

play07:32

collab so we can import it right away

play07:34

we're going to use a few modules from

play07:36

torch torch vision and torch nn in this

play07:38

case we have to take care of managing

play07:40

operations on the correct device

play07:42

ourselves so we check if we have a gpu

play07:45

available since gpu is turned on in this

play07:48

collab the device name is cuda in this

play07:50

case here i define the batch size as

play07:52

hyper parameter 32 was also the default

play07:55

value under the hood in tensorflow to

play07:57

load the data set we define a transforms

play08:00

object this will transform the images to

play08:02

a pi torch tensor and also applies

play08:05

normalization as training data set we

play08:07

can also use the cipher 10 from the

play08:09

built-in data sets module then we create

play08:12

a data loader object this is the heart

play08:15

of the pytorch data loading utility and

play08:18

provides optimized loading and

play08:20

iterations over the data set then we do

play08:22

the same for the test data loader the

play08:24

only difference here is that train and

play08:26

shuffle parameters are set to false like

play08:29

before i have some helper code to plot

play08:31

an image grid with matplotlib to get

play08:33

access to the data set we create an iter

play08:36

object and access the first batch by

play08:38

calling data dot next now let's create

play08:41

the model every model in pi church is

play08:43

implemented with a class that inherits

play08:46

from nn.module and it needs to implement

play08:48

the init and the forward function in the

play08:51

init function we simply create all the

play08:53

layers we want so all the convolutional

play08:55

layers all linear layers and the max

play08:57

pooling layers one thing to note

play08:59

compared to tensorflow is that here we

play09:02

also need to specify the correct input

play09:04

shapes for each layer so you first have

play09:06

to check how each layer affects the

play09:08

tensor size the forward function then

play09:10

defines what code will be executed in

play09:12

the forward pass here we basically call

play09:15

all the layers after each other we also

play09:17

apply the value actuation function when

play09:19

needed by calling f.value and we use

play09:22

torch.flatten before the linear layers

play09:25

this should give the same model

play09:26

architecture as before we need more code

play09:29

but we also get more flexibility with

play09:31

this object-oriented approach for

play09:33

example if we want to lock information

play09:36

or dump data during the forward pass we

play09:38

could very easily add this code here

play09:40

after creating the class we then create

play09:42

a model object and since we use a gpu we

play09:46

also have to push the object to the gpu

play09:48

by calling dot to device we also need a

play09:51

loss and an optimizer like before here

play09:54

we cannot simply use a string for the

play09:56

atom optimizer and need to create an

play09:58

actual object from the correct api class

play10:00

and now let's do the training remember

play10:03

how this was a one-liner with model.fit

play10:05

in tensorflow well here we have to put

play10:08

in some more work and write the training

play10:10

loop ourselves but again this gives you

play10:12

more flexibility if you want to add

play10:14

custom behavior for a basic pytorch

play10:16

training loop we need the following i

play10:18

first store the number of iterations per

play10:21

epoch and then we have an outer loop

play10:23

over the number of epochs we use 10 like

play10:26

before then we keep track of the running

play10:28

loss so this will be the average loss

play10:30

for each epoch and then we have an inner

play10:32

loop over the train loader this iterates

play10:35

over all the batches of the training

play10:37

data set and returns the images and the

play10:39

labels again we have to push it to the

play10:42

gpu here to have both the model and the

play10:44

data on the same device then we call the

play10:46

model and pass the inputs to it this

play10:49

essentially executes the forward

play10:51

function under the hood and thus the

play10:52

forward pass with the outputs and the

play10:54

original labels we then calculate the

play10:56

loss and then we have to do the backward

play10:58

pass and call optimizer.step

play11:01

loss.backward performs the back

play11:03

propagation and optimizer.step performs

play11:06

the update steps for the weights we also

play11:08

have to empty the optimizer gradients

play11:10

before each iteration i won't go into

play11:13

more detail here but basically these are

play11:15

all the steps needed for a training loop

play11:17

then we can update the running loss and

play11:19

after each epoch print the average epoch

play11:22

loss to see some information during

play11:23

training again this needs more code but

play11:26

the steps should be clear and allow for

play11:28

much more customization now before we go

play11:30

to the evaluation i want to mention that

play11:33

of course tensorflow also allows

play11:35

customization on a lower level remember

play11:37

the subclassing api i mentioned in the

play11:39

beginning this is basically what you

play11:41

have to use if you want a similar level

play11:43

of customization in tensorflow i also

play11:45

need to mention that with tensorflow we

play11:48

got automatic training and validation

play11:50

splitting during training just with the

play11:52

validation split argument here we would

play11:55

have to implement this ourselves by

play11:57

using a third validation data loader and

play11:59

applying this in the training loop i did

play12:01

not do this here and hence the training

play12:03

was done on the full training data set

play12:06

this is the one thing that is different

play12:08

and could skew the results slightly and

play12:10

should be pointed out and now the last

play12:12

step evaluation for this we set the

play12:15

model to evolve mode and we say with

play12:17

torch dot no great this basically turns

play12:20

off gradient tracking since we no longer

play12:23

need it here and then we do a similar

play12:25

loop as before but now over the test

play12:27

loader again we pass the tensors to the

play12:30

correct device do the forward pass by

play12:32

calling the model and then we get the

play12:34

actual class labels by calling torch.max

play12:37

we then calculate the number of correct

play12:39

predictions and in the end we can

play12:41

calculate and print the final test

play12:43

accuracy let's look at the training loss

play12:45

and the test accuracy for both

play12:47

frameworks side by side pi charge test

play12:50

accuracy was

play12:51

0.72 and tensorflow test accuracy was

play12:54

0.69

play12:56

training loss in pi torch was 0.57

play12:59

and training loss in tensorflow was 0.61

play13:02

both times pi charge is slightly better

play13:05

but again the results could be slightly

play13:07

skewed since i did not use a validation

play13:09

split in pytorch but overall i'd say

play13:12

performance wise both frameworks are on

play13:14

the same level alright and that's it i

play13:16

hope this gave you a great overview of

play13:18

both frameworks let me know in the

play13:20

comments which one is your favorite and

play13:22

again i have courses for both libraries

play13:25

on my channel and i put the links in the

play13:26

description below if you enjoyed the

play13:28

video please leave me a like and then i

play13:30

hope to see you in the next video bye

Rate This

5.0 / 5 (0 votes)

Связанные теги
ディープラーニングTensorFlowPyTorchフレームワーク機械学習AI開発研究プロダクションGPUアクセラレーションオープンソース
Вам нужно краткое изложение на английском?