"""tf.random_normal(shape,mean = 0.0,stddev = 1.0,dtype = tf.float32,seed = None,name = None)
从正态分布输出随机值。
shape:一维整数张量或Python数组。 输出张量的形状。用一个列表表示产出的张量的形状
mean:类型dtype的0-D张量或Python值。正态分布的均值。均值
stddev:dtype类型的0-D张量或Python值。正态分布的标准差。标准差
dtype:输出的类型。数据类型
seed:一个Python整数。 用于为分发创建一个随机种子。 有关行为,请参阅set_random_seed。
name:操作的名称(可选)。
tf.zeros(shape, dtype=tf.float32, name=None)
生成元素值为0的数或数组。
shape:生成维度的形状
dtype:数据的类型
name:名字,参数可选。
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)[source]
start:是采样的起始点
stop:是采样的终点
num:是采样的点个数
endpoint:是最后一个stop数字是否包含进去,默认包含;
retstep;是两个数字间的间距,默认不显示;
dtype默认
tf.reduce_mean(input_tensor, reduction_indices=None, keep_dims=False, name=None)
求平均值
input_tensor:待求值的tensor。
reduction_indices:在哪一维上求解。不指定参数时,那么就在所有的元素中取平均值。为0,每一列求平均值,为1,则第二维的元素取平均值,即每一行求平均值
"""
import tensorflowas tf
import numpyas np
def add_layer(inputs,in_size,out_size,activation_function=None):#添加层函数
Weights = tf.Variable(tf.random_normal([in_size,out_size]))#随机输出一个行为in_size和列为out_size的数组,weights是有一个初始值的。
biases = tf.Variable(tf.zeros([1,out_size])+0.1)#产生一个1行,out_size列全为0的数组,数组与元素都加上1?。
Wx_plus_b = tf.matmul(inputs,Weights) + biases#?
if activation_functionis None:
outputs = Wx_plus_b
else:
outputs = activation_function(Wx_plus_b)
return outputs
x_data = np.linspace(-1,1,300)[:,np.newaxis]#-1到1的区间有300个单位,np.newaxis为x_data增加维度?
noise = np.random.normal(0,0.05,x_data.shape)#加入干扰值提高数据的真实性,由均值为0,方差为0.05的正态分布中产生一个和x_data一样大的数组
y_data = np.square(x_data) -0.5 + noise#np.square将x_data里的数都进行平方运算。
xs = tf.placeholder(tf.float32,[None,1])#列是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]))#先求reduce_sum() 就是求和,
# 由于求和的对象是tensor,所以是沿着tensor的某些维度求和。
# reduction_indices是指沿tensor的哪些维度求和
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
#tf.train.GradientDescentOptimizer(learingRate).minimize(loss)
#这里learingRate为梯度下降法的学习速率tf.train.GradientDescentOptimizer()返回一个optimizer,
# 参数为learningRate,这个运算的目的就是最小化loss。
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
for iin range(100):
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}))