GPU最初就是为了游戏而开发的
深度学习GPU目前指的就是英伟达的GPU
--------------------------------------
CPU一般是八核,十六核...可以同时做许多不同的事。可以多线程
GPU一般是几千核,GPU的核很弱,很慢,需要几个协作才能处理任务
CPU只有很小的cache,没有内存
GPU本身有8/12/16GB的内存
------------------------------------------------------------------------------------------------------------------------------
GPU适合并行运算
矩阵相乘,卷积使用GPU非常高效 (小的运算可能cpu更快,但是大运算gpu很有优势)
--------------------------------------------------------------------------------------------------------------------------------
CUDA是英伟达开发的类c语言,可以充分利用GPU特性
openCL 可以用于英伟达,AMD,CPU 但是较慢
-----------------------------------------------------------------
GPU一般比cpu快60-70倍
----------------------------------------------------------
使用英伟达的cuda库......,比你自己写的快两三倍。
-------------------------------------------------------------
模型存储在cpu或GPU上,但数据在计算机里,读取数据会相对变得很慢。推荐使用固态硬盘或者将数据读进RAM里
-----------------------------------------------------------------
numpy不能运行在gpu上!!!而且得手动计算梯度
--------------------------------------------------------------------------
tensorflow先声明计算图,再开始多次迭代
--------------------------------------------------------------------------
由于numpy只能在cpu上,而网络有时候在gpu上,传递起来非常慢,因此w需要声明为tf.Variable() 而不是tf.placeholder()
tf.placeholder是需要赋值为numpy变量的
---------------------------------------------------------------------------
只是sess.run(loss) 参数是不会更新的
需要
optimizer = tf.train.GradientDescentOptimizer(1e-3)
updates = optimizer.minimize(loss)
sess.run([loss,updates],feed_dict=values)
而updates事实上是通过tf.group(w1,w2...)来实现的,它不返回值,只是表明依赖关系,如下图
------------------------------------------------------------------------
tensorflow支持分布式计算,可以切换cpu/gpu
-----------------------------------------------------------------------------------
pytorch是动态计算图,tensorflow是静态计算图
-------------------------------------------------------------------------------
具体细节,代码太多,不贴了。