1. 程式人生 > >tensorflow建立一個簡單的神經網路

tensorflow建立一個簡單的神經網路

下面是用tensorflow建立的一個神經網路實現函式y=x^2+0.1

# -*- coding:utf-8 -*-
# -*- author: 時間行者 -*-
# -*- date: 2018-12-25 -*-

import tensorflow as tf
import numpy as np


def add_layer(inputs, in_size, out_size, activation_function=None):
    weight = 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, weight) + biases
    if activation_function is None:
        outputs = wx_plus_b
    else:
        outputs = activation_function(wx_plus_b)
    return outputs


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

xs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])

h1 = add_layer(xs, 1, 20, activation_function=tf.nn.relu)
prediction = add_layer(h1, 20, 1, activation_function=None)
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction), reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
for i in range(1001):
    sess.run(train_step, feed_dict={xs: x_data, ys: y_data})
    if i % 20 == 0:
        print('第'+str(i)+'次迴圈:', end='        ')
        print('loss=', sess.run(loss, feed_dict={xs: x_data, ys: y_data}))

程式執行結果如下:

第0次迴圈:        loss= 23.373762
第20次迴圈:        loss= 0.048922796
第40次迴圈:        loss= 0.021126091
第60次迴圈:        loss= 0.013575307
第80次迴圈:        loss= 0.0108266175
第100次迴圈:        loss= 0.009445705
第120次迴圈:        loss= 0.008533567
第140次迴圈:        loss= 0.007823043
第160次迴圈:        loss= 0.0072098654
第180次迴圈:        loss= 0.006656323
第200次迴圈:        loss= 0.006166407
第220次迴圈:        loss= 0.005741052
第240次迴圈:        loss= 0.0053734
第260次迴圈:        loss= 0.00506666
第280次迴圈:        loss= 0.004798221
第300次迴圈:        loss= 0.004575958
第320次迴圈:        loss= 0.004378302
第340次迴圈:        loss= 0.004208824
第360次迴圈:        loss= 0.004068568
第380次迴圈:        loss= 0.003946499
第400次迴圈:        loss= 0.0038447594
第420次迴圈:        loss= 0.003752898
第440次迴圈:        loss= 0.0036665448
第460次迴圈:        loss= 0.0035842066
第480次迴圈:        loss= 0.003507119
第500次迴圈:        loss= 0.0034405235
第520次迴圈:        loss= 0.0033825918
第540次迴圈:        loss= 0.0033249354
第560次迴圈:        loss= 0.0032722128
第580次迴圈:        loss= 0.003223783
第600次迴圈:        loss= 0.0031767637
第620次迴圈:        loss= 0.0031365806
第640次迴圈:        loss= 0.0030961405
第660次迴圈:        loss= 0.0030544868
第680次迴圈:        loss= 0.0030163706
第700次迴圈:        loss= 0.002981162
第720次迴圈:        loss= 0.0029485056
第740次迴圈:        loss= 0.002916187
第760次迴圈:        loss= 0.002882743
第780次迴圈:        loss= 0.002852073
第800次迴圈:        loss= 0.0028244334
第820次迴圈:        loss= 0.002799506
第840次迴圈:        loss= 0.002776182
第860次迴圈:        loss= 0.0027535378
第880次迴圈:        loss= 0.0027316187
第900次迴圈:        loss= 0.0027101901
第920次迴圈:        loss= 0.0026921076
第940次迴圈:        loss= 0.002675853
第960次迴圈:        loss= 0.002660744
第980次迴圈:        loss= 0.002648002
第1000次迴圈:        loss= 0.0026354636

Process finished with exit code 0