PaddlePaddle一步一步搭建簡單網絡

PaddlePaddle一步一步搭建簡單網絡

如何開始

在這裏插入圖片描述
對於新手入門來說,個人建議先看Fluid編程指南,明白瞭如何使用之後,再看線性迴歸、數字識別。

現實問題

我們有一堆數據x和數據y,數據x與數據y之間存在某種規律,我們的目標是當新的x出現後,我們通過這種規律確定y的值,根據y的值可以指導我們的決策。所以首先我們得先得到規律,這就要通過深度學習讓機器學到,然後我們給出新的x值,通過已學習到的關係得到新的y值。

上面一段話,總結3個關鍵點

  1. 已有的一堆數據x和數據y爲歷史數據,也成爲訓練數據
  2. 這種規律稱爲f
  3. 新的x值確定的y值成爲預測值

數學表達出來就是

y = f ( x ) y=f(x)

PaddlePaddle如何解決現實問題

數據如何傳入到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)

完整代碼

文件SimpleNN.py

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)

文件SimpleNNInfer.py

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)

結果:
在這裏插入圖片描述