TensorFlow 平面曲線擬合

2021-10-06 23:07:36 字數 3201 閱讀 3594

平面曲線屬於非線性函式,至少需要 3 層的神經網路(輸入層,隱藏層x1,輸出層)來實現,為達到較好的效果,可嘗試更多層,下面的例子使用了2層隱藏層,採用最基本的全連線形式,隱藏層的神經元個數沒有嚴格要求,根據實際專案選擇,下面例子選用8個。

下面通過**實現:

import tensorflow as tf

import numpy as np

import matplotlib.pyplot as plt

# 構造新增乙個神經層的函式

defadd_layer

(inputs, in_size, out_size, activation_function=

none):

weights = tf.variable(tf.random_normal(

[in_size, out_size]))

#權重矩陣[列,行]

biases = tf.variable(tf.zeros([1

, out_size])+

0.1)

# 偏置向量[列,行]

wx_plus_b = tf.matmul(inputs, weights)

+ biases # w*x+b(未啟用)

if activation_function is

none

:# 線性關係(不使用啟用函式)

outputs = wx_plus_b

else

: outputs = activation_function(wx_plus_b)

# 非線性啟用

return outputs

# 匯入資料,這裡的x_data和y_data並不是嚴格的一元二次函式的關係

# 因為我們多加了乙個noise,這樣看起來會更像真實情況

x_data = np.linspace(-1

,1,300

, dtype=np.float32)[:

, np.newaxis]

#300行,1個特性

noise = np.random.normal(0,

0.05

, x_data.shape)

.astype(np.float32)

# 均值,方差,形狀

y_data = np.power(x_data,3)

*10-8

*noise # y = x^2-0.5+noise

# 利用佔位符定義我們所需的神經網路的輸入

# none代表無論輸入有多少都可以,因為輸入只有乙個特徵,所以這裡是1

xs = tf.placeholder(tf.float32,

[none,1

])ys = tf.placeholder(tf.float32,

[none,1

])

# 定義隱藏層【l1】和【l2】,利用之前的add_layer()函式

l1 = add_layer(xs,1,

8, activation_function=tf.nn.sigmoid)

# 輸入層,輸入,輸出

l2 = add_layer(l1,8,

8, activation_function=tf.nn.sigmoid)

# 輸入層,輸入,輸出

# 定義輸出層【prediction】。輸入就是隱藏層的輸出——l1,輸入有10層,輸出有1層

prediction = add_layer(l2,8,

1, activation_function=

none

)

# 計算**值prediction和真實值的誤差,對二者差的平方求和再取平均

loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction)

,reduction_indices=[1

]))

# tf.train.gradientdescentoptimizer()中的值通常都小於1,

# 這裡取的是0.08,學習率,代表以0.08的效率來最小化誤差loss

train_step = tf.train.gradientdescentoptimizer(

0.08

).minimize(loss)

# 使用變數時,都要對它進行初始化

init = tf.global_variables_initializer(

)# 定義session,並用 session 來執行 init 初始化步驟

sess = tf.session(

)sess.run(init)

fig = plt.figure(

)#先生成乙個框

ax = fig.add_subplot(1,

1,1)

#子圖位置

ax.scatter(x_data,y_data,c =

'b',marker =

'.')

plt.ion(

)# plt.ion()用於連續顯示

# 學習1000次。學習內容是train_step, 用session來run每一次training的資料

for i in

range

(1000):

sess.run(train_step, feed_dict=

)# 每50步我們輸出一下機器學習的誤差

if i %

50==0:

print

(sess.run(loss, feed_dict=))

try:

ax.lines.remove(lines[0]

)#抹除上一次的第一條線(總共就一條)

except exception:

pass

prediction_value = sess.run(prediction,feed_dict=

)# plot the prediction

lines = ax.plot(x_data,prediction_value,

'r-'

,lw=5)

plt.pause(

0.2)

參考:莫煩python-例子3 結果視覺化

det曲線 平面曲線的曲率的複數表示

開學已經是第二週了,我的 微分幾何 也上課兩周了,進度比較慢,現在才講到平面曲線的曲率。在平面曲線 boldsymbol t x t y t 某點上可以找出單位切向量。boldsymbol left frac,frac right 其中 ds 2 dx 2 dy 2 將這個向量逆時針旋轉90度之後,...

TensorFlow擬合曲線

本文是官方例子做了一點小小的改動,基於tensorflow實現擬合曲線,對初學tensorflow者有一定幫助。訓練500步,每50步輸出一次,並顯示在plt中。開始訓練 訓練200步後 訓練完成 以下是完整 coding utf 8 author 吳晶 wechat 18007148050 imp...

直線,折線,曲線分割平面以及平面分割空間問題

註明出處,摘自 1 n條直線最多分平面問題 題目大致如 n條直線,最多可以把平面分為多少個區域。析 可能你以前就見過這題目,這充其量是一道初中的思考題。但乙個型別的題目還是從簡單的入手,才容易發現規律。當有n 1條直線時,平面最多被分成了f n 1 個區域。則第n條直線要是切成的區域數最多,就必須與...