對於新手入門來說,個人建議先看Fluid編程指南,明白瞭如何使用之後,再看線性迴歸、數字識別。
我們有一堆數據x和數據y,數據x與數據y之間存在某種規律,我們的目標是當新的x出現後,我們通過這種規律確定y的值,根據y的值可以指導我們的決策。所以首先我們得先得到規律,這就要通過深度學習讓機器學到,然後我們給出新的x值,通過已學習到的關係得到新的y值。
上面一段話,總結3個關鍵點
數學表達出來就是
數據如何傳入到PaddlePaddle中進行學習?
如何通過PaddlePaddle進行學習?
學習完成後,如何進行預測?
1.我們通過numpy.array給了4個x的數據1.0、2.0、3.0、4.0,4個y的數據2.0、4.0、6.0、8.0,作爲訓練數據。
train_x = numpy.array([[1.0], [2.0], [3.0], [4.0]]).astype('float32') train_y = numpy.array([[2.0], [4.0], [6.0], [8.0]]).astype('float32')
2.定義2個空間x和y,存放train_x和train_y,建立全連接網絡,將x與預測y聯繫到一起。
x = fluid.layers.data(name="x", shape=[1], dtype='float32') y = fluid.layers.data(name="y", shape=[1], dtype='float32') y_predict = fluid.layers.fc(input=x, size=1, act=None)
3.如何確定學習的好與不好,標準是什麼?cost就是y_predict與y的方差,avg_cost就是均方差,sgd_optimizer就是使用隨機梯度下降算法來最小化均方差。
cost = fluid.layers.square_error_cost(input=y_predict, label=y) avg_cost = fluid.layers.mean(cost) sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.001) sgd_optimizer.minimize(avg_cost)
4.獲得學習到的規律(參數保存到文件中)
model_path="./demo_paddle_model" fluid.io.save_params(executor=exe,dirname=model_path,main_program=None)
5.使用已經學到的模型做預測(從文件讀取參數)
param_path = "./demo_paddle_model" prog = fluid.default_main_program() fluid.io.load_params(executor=exe, dirname=param_path, main_program=prog)
import paddle.fluid as fluid import numpy import time # 定義數據 train_x = numpy.array([[1.0], [2.0], [3.0], [4.0]]).astype('float32') train_y = numpy.array([[2.0], [4.0], [6.0], [8.0]]).astype('float32') # 定義網絡 x = fluid.layers.data(name="x", shape=[1], dtype='float32') y = fluid.layers.data(name="y", shape=[1], dtype='float32') y_predict = fluid.layers.fc(input=x, size=1, act=None) # 定義損失函數 cost = fluid.layers.square_error_cost(input=y_predict, label=y) avg_cost = fluid.layers.mean(cost) sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.001) sgd_optimizer.minimize(avg_cost) # 參數初始化 cpu = fluid.core.CPUPlace() exe = fluid.Executor(cpu) exe.run(fluid.default_startup_program()) # 開始訓練 for i in range(10000): outs = exe.run( feed={'x': train_x, 'y': train_y}, fetch_list=[y_predict.name, avg_cost.name]) # time.sleep(1) print(outs) model_path="./demo_paddle_model" fluid.io.save_params(executor=exe,dirname=model_path,main_program=None)
import paddle.fluid as fluid import numpy # 定義數據 new_x = numpy.array([[9.0]]).astype('float32') # 定義網絡 x = fluid.layers.data(name="x", shape=[1], dtype='float32') y = fluid.layers.data(name="y", shape=[1], dtype='float32') y_predict = fluid.layers.fc(input=x, size=1, act=None) # 參數初始化 cpu = fluid.core.CPUPlace() exe = fluid.Executor(cpu) param_path = "./demo_paddle_model" prog = fluid.default_main_program() fluid.io.load_params(executor=exe, dirname=param_path, main_program=prog) outs = exe.run( feed={'x': new_x}, fetch_list=[y_predict.name]) print(outs)
結果: