手动构建一个简单的神经网络步骤
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):
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
x_data
= np
.linspace
(-1, 1, 300, dtype
=np
.float32
)[:, np
.newaxis
]
noise
= np
.random
.normal
(0, 0.05, x_data
.shape
).astype
(np
.float32
)
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
= tf
.reduce_mean
(tf
.reduce_sum
(tf
.square
(ys
-prediction
), reduction_indices
=[1]))
train_step
= tf
.train
.GradientDescentOptimizer
(0.1).minimize
(loss
)
sess
= tf
.Session
()
if int((tf
.__version__
).split
('.')[1]) < 12 and int((tf
.__version__
).split
('.')[0]) < 1:
init
= tf
.initialize_all_variables
()
else:
init
= tf
.global_variables_initializer
()
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
}))
简单tensorflow构建及训练过程(以y=x^2+0.5为例):
定义神经网络层(输入数据,数据维度(x1,x2,x3,),输出维度,是否使用激活函数等)构造数据集添加占位符 (tensorflow程序在run之前都是在定义要执行的(op)操作,placeholder就是将要输入的数据提前写在那里了)构造神经网络,定义loss
添加隐藏层、输出层定义loss
定义训练方法 也就是定义的梯度下降的方法,这一步每次都会根据loss,更新权值初始化所有变量sess.run()进行训练
待更新…