1. 程式人生 > >tensorflow-搭建兩層神經網路

tensorflow-搭建兩層神經網路

import tensorflow as tf
import numpy as np
#定義一個定義層的函式,輸入引數為inputs資料,輸入維度,輸出維度,啟用函式名稱
def add_layer(inputs, in_size, out_size, activation_function=None):
#建立權重變數,使用random_normal函式,將產生均值為0,方差為1的高斯分佈資料,
    Weights = tf.Variable(tf.random_normal([in_size,out_size]))
#建立偏置值,偏置值最好不為0
    Biases = tf.Variable(tf.zeros([1,out_size])+0.1)
#tf中的tensor張量乘法和加法,這裡使用+和tf.add等價,+會預設轉換為tf.add
    Wx_plus_b = tf.matmul(inputs,Weights) + Biases
    if activation_function==None:
        outputs = Wx_plus_b
    else:
        outputs = activation_function(Wx_plus_b)
    return outputs

#得到-1到1之間的300個等分數,生成初始是(300,),通過np.newaxis增加一個維度,使得維度變為(300,1)
x_data = np.linspace(-1,1,300)[:,np.newaxis]
#通過np.random.normal()函式生成平均值為0,方差為0.05的高斯分佈
noise = np.random.normal(0,0.05,x_data.shape)
y_data = np.square(x_data)-0.5+noise

#建立佔位符,當輸入需要時可以按照需要輸入資料
xs = tf.placeholder(tf.float32,[None,1])
ys = tf.placeholder(tf.float32,[None,1])

#新增兩層網路
l1 = add_layer(xs,1,10, activation_function = tf.nn.relu)
prediction = add_layer(l1, 10, 1, activation_function= None)

#計算loss值,其中reduce_sum和reduce_mean都可以使用reduction_indices=[0]或[1]表示列和行進行操作
#loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction), reduction_indices=[1]))
cost = tf.square(ys-prediction)
#loss = tf.reduce_sum(cost, reduction_indices=[1])
loss1 = tf.reduce_mean(cost)

#使用GradientDescentOptimizer優化方法使得loss minimize
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss1)


init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    for i in range(1000):
        sess.run(train_step,feed_dict={xs:x_data, ys:y_data})
        if i%50==0:
            #print(sess.run(loss,feed_dict={xs:x_data, ys:y_data}))
            #print(sess.run(cost, feed_dict={xs:x_data, ys:y_data}))
#通過feed_dict={字典}的方式將資料填充到佔位符中
            print(sess.run(loss1, feed_dict={xs:x_data, ys:y_data}))
            #print(loss)