tensorflow建立一個簡單的神經(jīng)網(wǎng)絡的方法
本筆記目的是通過tensorflow實現(xiàn)一個兩層的神經(jīng)網(wǎng)絡。目的是實現(xiàn)一個二次函數(shù)的擬合。
如何添加一層網(wǎng)絡
代碼如下:
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應該定義為[類別數(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)建相應的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)絡
- TensorFlow深度學習之卷積神經(jīng)網(wǎng)絡CNN
- TensorFlow實現(xiàn)卷積神經(jīng)網(wǎng)絡CNN
- TensorFlow搭建神經(jīng)網(wǎng)絡最佳實踐
- Tensorflow實現(xiàn)卷積神經(jīng)網(wǎng)絡用于人臉關鍵點識別
- 利用TensorFlow訓練簡單的二分類神經(jīng)網(wǎng)絡模型的方法
- TensorFlow實現(xiàn)RNN循環(huán)神經(jīng)網(wǎng)絡
- tensorflow入門之訓練簡單的神經(jīng)網(wǎng)絡方法
- TensorFlow 實戰(zhàn)之實現(xiàn)卷積神經(jīng)網(wǎng)絡的實例講解
- tensorflow學習筆記之簡單的神經(jīng)網(wǎng)絡訓練和測試
相關文章
Tensorflow獲取張量Tensor的具體維數(shù)實例
今天小編就為大家分享一篇Tensorflow獲取張量Tensor的具體維數(shù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01詳解?PyTorch?Lightning模型部署到生產(chǎn)服務中
這篇文章主要為大家介紹了如何將PyTorch?Lightning模型部署到生產(chǎn)服務中的詳細教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09Python3中關于cookie的創(chuàng)建與保存
今天小編就為大家分享一篇關于Python3中關于cookie的創(chuàng)建與保存的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10