Pytorch and Tensorflow的第一步

本文只討論一件事情,如何在這兩套框架中求一元二次方程組的最小值。

  • Tensorflow篇

參考吳恩達在deeplearning.ai的C2W3L11,使用TF求 f(w)=(w-x)^2 的極小值,這裡x=5,即我們希望通過梯度下降使得最終的w達到5這個值。

#importsimport numpy as npimport tensorflow as tf#setup coefficientscoefficients = np.array([[1],[-10],[25]])x=tf.placeholder(tf.float32, [3,1])#define variablew=tf.Variable(0,dtype=tf.float32)cost=x[0][0]*w**2+x[1][0]*w+x[2][0]train=tf.train.GradientDescentOptimizer(0.1).minimize(cost)#setup session and initinit=tf.global_variables_initializer()session=tf.Session()#runsession.run(init)session.run(train,feed_dict={x:coefficients})for i in range(30): session.run(train,feed_dict={x:coefficients}) print(session.run(w))

結果如下:

1.8

2.44

...

4.99381

4.99505

  • Pytorch篇

做同樣的事

#importsimport torchfrom torch.autograd import Variable#setup coefficientsx=[1,-10,25]#setup variablew=Variable(torch.ones(1,1),requires_grad=True)#runfor i in range(30): costf = x[0]*w**2+x[1]*w+x[2] costf.backward(torch.FloatTensor([0.1])) w.data -= w.grad.data print(w) w.grad.data.zero_()

結果輸出:

Variable containing:

1.8000

[torch.FloatTensor of size 1x1]

Variable containing:

2.4400

[torch.FloatTensor of size 1x1]

Variable containing:

2.9520

[torch.FloatTensor of size 1x1]

...

Variable containing:

4.9938

[torch.FloatTensor of size 1x1]

Variable containing:

4.9950

[torch.FloatTensor of size 1x1]

個人認為pytorch在代碼的簡潔性、邏輯性上更加清晰明了。

而之所以做這件看似和機器學習無關的事是因為理解最基本的東西對初學者並不那麼簡單,拋開一切和ML相關的演算法,tf與torch還能用來解決數學問題,接下來用數學的思維去思考解決ML的問題就會熟悉很多。


推薦閱讀:

tf.get_variable
乾貨 | TensorFlow的55個經典案例
學習筆記TF012:卷積網路簡述
AlphaZero?國際象棋開源實現:Leela Chess
分散式TensorFlow入門教程

TAG:PyTorch | TensorFlow | 機器學習 |