tensorflow建立一個簡單的神經(jīng)網(wǎng)絡(luò)的方法
本筆記目的是通過tensorflow實現(xiàn)一個兩層的神經(jīng)網(wǎng)絡(luò)。目的是實現(xiàn)一個二次函數(shù)的擬合。
如何添加一層網(wǎng)絡(luò)
代碼如下:
def add_layer(inputs, in_size, out_size, activation_function=None):
# add one more layer and return the output of this layer
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
if activation_function is None:
outputs = Wx_plus_b
else:
outputs = activation_function(Wx_plus_b)
return outputs
注意該函數(shù)中是xW+b,而不是Wx+b。所以要注意乘法的順序。x應(yīng)該定義為[類別數(shù)量, 數(shù)據(jù)數(shù)量], W定義為[數(shù)據(jù)類別,類別數(shù)量]。
創(chuàng)建一些數(shù)據(jù)
# Make up some real data x_data = np.linspace(-1,1,300)[:, np.newaxis] noise = np.random.normal(0, 0.05, x_data.shape) y_data = np.square(x_data) - 0.5 + noise
numpy的linspace函數(shù)能夠產(chǎn)生等差數(shù)列。start,stop決定等差數(shù)列的起止值。endpoint參數(shù)指定包不包括終點值。
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)[source] Return evenly spaced numbers over a specified interval. Returns num evenly spaced samples, calculated over the interval [start, stop].

noise函數(shù)為添加噪聲所用,這樣二次函數(shù)的點不會與二次函數(shù)曲線完全重合。
numpy的newaxis可以新增一個維度而不需要重新創(chuàng)建相應(yīng)的shape在賦值,非常方便,如上面的例子中就將x_data從一維變成了二維。
添加占位符,用作輸入
# define placeholder for inputs to network xs = tf.placeholder(tf.float32, [None, 1]) ys = tf.placeholder(tf.float32, [None, 1])
添加隱藏層和輸出層
# add hidden layer l1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu) # add output layer prediction = add_layer(l1, 10, 1, activation_function=None)
計算誤差,并用梯度下降使得誤差最小
# the error between prediciton and real data loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),reduction_indices=[1])) train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
完整代碼如下:
from __future__ import print_function
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
def add_layer(inputs, in_size, out_size, activation_function=None):
# add one more layer and return the output of this layer
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
if activation_function is None:
outputs = Wx_plus_b
else:
outputs = activation_function(Wx_plus_b)
return outputs
# Make up some real data
x_data = np.linspace(-1,1,300)[:, np.newaxis]
noise = np.random.normal(0, 0.05, x_data.shape)
y_data = np.square(x_data) - 0.5 + noise
# define placeholder for inputs to network
xs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])
# add hidden layer
l1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu)
# add output layer
prediction = add_layer(l1, 10, 1, activation_function=None)
# the error between prediciton and real data
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),
reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
# important step
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
# plot the real data
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.scatter(x_data, y_data)
plt.ion()
plt.show()
for i in range(1000):
# training
sess.run(train_step, feed_dict={xs: x_data, ys: y_data})
if i % 50 == 0:
# to visualize the result and improvement
try:
ax.lines.remove(lines[0])
except Exception:
pass
prediction_value = sess.run(prediction, feed_dict={xs: x_data})
# plot the prediction
lines = ax.plot(x_data, prediction_value, 'r-', lw=5)
plt.pause(0.1)
運行結(jié)果:

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- TensorFlow平臺下Python實現(xiàn)神經(jīng)網(wǎng)絡(luò)
- TensorFlow深度學習之卷積神經(jīng)網(wǎng)絡(luò)CNN
- TensorFlow實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)CNN
- TensorFlow搭建神經(jīng)網(wǎng)絡(luò)最佳實踐
- Tensorflow實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)用于人臉關(guān)鍵點識別
- 利用TensorFlow訓練簡單的二分類神經(jīng)網(wǎng)絡(luò)模型的方法
- TensorFlow實現(xiàn)RNN循環(huán)神經(jīng)網(wǎng)絡(luò)
- tensorflow入門之訓練簡單的神經(jīng)網(wǎng)絡(luò)方法
- TensorFlow 實戰(zhàn)之實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)的實例講解
- tensorflow學習筆記之簡單的神經(jīng)網(wǎng)絡(luò)訓練和測試
相關(guān)文章
Python+Django在windows下的開發(fā)環(huán)境配置圖解
Python+Django在windows下的開發(fā)環(huán)境配置圖解教程,需要的朋友可以參考下。2009-11-11
OpenCV哈里斯角檢測|Harris?Corner理論實踐
這篇文章主要為大家介紹了OpenCV哈里斯角檢測|Harris?Corner理論實踐,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04
Python通過PIL獲取圖片主要顏色并和顏色庫進行對比的方法
這篇文章主要介紹了Python通過PIL獲取圖片主要顏色并和顏色庫進行對比的方法,實例分析了Python通過PIL模塊操作圖片的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03
python lambda表達式(匿名函數(shù))寫法解析
這篇文章主要介紹了python lambda表達式(匿名函數(shù))寫法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-09-09
python爬蟲爬取淘寶商品信息(selenum+phontomjs)
這篇文章主要為大家詳細介紹了python爬蟲爬取淘寶商品信息,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-02-02
基于Python實現(xiàn)GeoServer矢量文件批量發(fā)布
由于矢量圖層文件較多,手動發(fā)布費時費力,python支持的關(guān)于geoserver包又由于年久失修,無法在較新的geoserver版本中正常使用。本文為大家準備了Python自動化發(fā)布矢量文件的代碼,需要的可以參考一下2022-07-07

