平面曲線屬於非線性函式,至少需要 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條直線要是切成的區域數最多,就必須與...