国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

tensorflow建立一個簡單的神經網絡的方法

2020-02-22 23:13:09
字體:
來源:轉載
供稿:網友

本筆記目的是通過tensorflow實現一個兩層的神經網絡。目的是實現一個二次函數的擬合。

如何添加一層網絡

代碼如下:

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

注意該函數中是xW+b,而不是Wx+b。所以要注意乘法的順序。x應該定義為[類別數量, 數據數量], W定義為[數據類別,類別數量]。

創建一些數據

# Make up some real datax_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函數能夠產生等差數列。start,stop決定等差數列的起止值。endpoint參數指定包不包括終點值。

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函數為添加噪聲所用,這樣二次函數的點不會與二次函數曲線完全重合。

numpy的newaxis可以新增一個維度而不需要重新創建相應的shape在賦值,非常方便,如上面的例子中就將x_data從一維變成了二維。

添加占位符,用作輸入

# define placeholder for inputs to networkxs = tf.placeholder(tf.float32, [None, 1])ys = tf.placeholder(tf.float32, [None, 1])

添加隱藏層和輸出層

# add hidden layerl1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu)# add output layerprediction = add_layer(l1, 10, 1, activation_function=None)

計算誤差,并用梯度下降使得誤差最小

# the error between prediciton and real dataloss = 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_functionimport tensorflow as tfimport numpy as npimport matplotlib.pyplot as pltdef 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 datax_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 networkxs = tf.placeholder(tf.float32, [None, 1])ys = tf.placeholder(tf.float32, [None, 1])# add hidden layerl1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu)# add output layerprediction = add_layer(l1, 10, 1, activation_function=None)# the error between prediciton and real dataloss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),           reduction_indices=[1]))train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)# important stepinit = tf.initialize_all_variables()sess = tf.Session()sess.run(init)# plot the real datafig = 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)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 营山县| 嫩江县| 赫章县| 疏附县| 云安县| 宁南县| 平定县| 东乌| 绥宁县| 彰化市| 奉化市| 孙吴县| 静海县| 石景山区| 双城市| 荥阳市| 梁山县| 扶风县| 定安县| 黄陵县| 孝感市| 喀喇沁旗| 顺义区| 九龙坡区| 磐安县| 浪卡子县| 南昌县| 团风县| 独山县| 中宁县| 密山市| 峡江县| 东至县| 五河县| 昌平区| 广宁县| 绥中县| 嘉禾县| 离岛区| 玛纳斯县| 伊川县|