莫烦TensorFlow教程学习(5)——建造神经网络

本文详细介绍了使用TensorFlow搭建一个简单神经网络的过程,包括输入输出大小的理解、placeholder的使用、神经网络层的添加以及训练过程。通过具体代码实例,解析了神经网络的基本构造和训练流程。
  • 主要内容
    搭建第一个简单的神经网络(已具备相应的神经网络基础知识),放上视频地址莫烦TensorFlow教程学习(5)——建造神经网络

  • 遇到的问题
    输入输出的大小问题,莫烦建造的是输入层为1,隐藏层10个,输出层一个的简单神经网络,其中代码中有这样一句话
    x_data = np.linspace(-1,1,300,dtype=np.float32)[:,np.newaxis]
    这是准备的x数据,一直不知道这个300是什么,后来发现300是对应的样本数量,这句话首先生成一个有300个元素的一维数组,再通过[:,np.newaxis]转换成1列300行的矩阵形式(列向量),输入层神经元个数=列数=每行元素个数=1,样本数量=列数=300。每次循环样本数量都是300个。关于[:,np.newaxis]的用法感谢博客:,np.newaxis用法介绍。可能剩下的疑惑就是placeholder了。但是关于placeholder多见几次代码可能就会更有感觉。

  • 代码及注释

#莫烦TensorFlow视频教程

#def add_layer 添加层  2018.10.10,2018.10.12
import tensorflow as tf
import numpy as np

#定义一个添加层函数 in_size:输入大小 out_size:输出大小 激励函数默认为none(即线性)
# Wx_plus_b(w*x+b)
def add_layer(inputs, in_size, out_size, activation_function=None):
   #对于权重weights:in_size是行数,outsize是列数
   Weights = tf.Variable(tf.random_normal([in_size,out_size]))
   #对于偏置项biases:1是行数,outsize是列数,初始值为0.1
   biases = tf.Variable(tf.zeros([1,out_size])+0.1)
   #注意:multiply不是矩阵乘法,只是单纯的元素相乘,mutmul是矩阵乘法
   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在-1到1,300个,newaxis解释很清楚(https://blog.youkuaiyun.com/molu_chase/article/details/78619731)
# 将一个有300个元素的一维数组转换成1列300行的矩阵形式(列向量)
# 样本大小300个
x_data = np.linspace(-1,1,300,dtype=np.float32)[:,np.newaxis]
# 噪点方差0.05,和x_data一样的格式
noise = np.random.normal(0,0.05,x_data.shape).astype(np.float32)
# y=x^2-0.5+噪点(更像真实值)
y_data = np.square(x_data)-0.5+noise

#利用占位符定义我们所需的神经网络的输入
#None代表无论输入有多少都可以,因为输出只有一个特征,所以这里是1
xs = tf.placeholder(tf.float32,[None,1])
ys = tf.placeholder(tf.float32,[None,1])

#建网络 输入层:1 隐藏层:10 输出层: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]))
#学习速率0.1 来减小loss
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

#初始化
#init = tf.initialize_all_variables()已经被替换
init = tf.global_variables_initializer() 
sess = tf.Session()
sess.run(init)

#执行1000次,每50次输出loss
for i in range(1000):
   #当运算要用到placeholder时,就需要feed_dict这个字典来指定输入
   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}))

  • 运行结果
    运行结果
    这里有人会有疑惑说为什么每一个结果不一样,因为你扔进去的数据都不同啊,加的噪声是随机的哈~数据变了训练出来的结果就会有差异。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值