拟解决基本问题描述
经过学习tensorflow的知识,来进行对数据的一些简单处理和进行简单的机器学习算法
数据准备与数据预处理
数据准备
数据来源于自动生成的数据,通过添加噪点来模拟真实的数据。数据采用的是 这个函数,其中 的数据是采取随机生成的在区间 之间的300个随机数,然后生成了方差为0.5的300个随机数用来作为噪点,通过 来产生数据。
神经网络介绍
神经网络是一种数学模型,是存在于计算机的神经系统,由大量的神经元相连接并进行计算,在外界信息的基础上,改变内部的结构,常用来对输入和输出间复杂的关系进行建模。
神经网络由大量的节点和之间的联系构成,负责传递信息和加工信息,神经元也可以通过训练而被强化。
这个图就是一个神经网络系统,它由很多层构成。输入层就是负责接收信息,比如说一只猫的图片。输出层就是计算机对这个输入信息的认知,它是不是猫。隐藏层就是对输入信息的加工处理。
Tensorflow是谷歌开发的深度学习系统,用它可以很快速地入门神经网络。
它可以做分类,也可以做拟合问题,就是要把这个模式给模拟出来。
在运用tensorflow处理问题时,主要是
定义添加神经层的函数
1.训练的数据
2.定义节点准备接收数据
3.定义神经层:隐藏层和预测层
4.定义 loss 表达式
5.选择 optimizer 使 loss 达到最小
数据可视化
本次测试中训练数据采用的是 这个函数,可以先将图像画出来。
因为添加了噪点的关系,所以使得数据较为离散,比较接近真实的数据。在经过神经网络处理后,对每迭代500次的数据进行曲线图像化
测试结果
经过运行1000次后,通过动态图像可看到每500次迭代后的结果会相较于真是数据跟接近
到最后的
总结
通过学习莫烦的视频,对神经网络有了一定的认识,并学习了运用tensorflow这个工具来处理问题并进行可视化。接下来将会继续熟练运用tensorflow来构建神经网络来处理问题。
代码
import numpy as np
import tensorflow as tf
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)[:,np.newaxis]
noise = np.random.normal(0,0.05,x_data.shape)
y_data = x_data*x_data*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.01).minimize(loss)
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.scatter(x_data,y_data)
plt.ion()
plt.show()
for i in range(10000):
#sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
_,l,pred = sess.run([train_step,loss,prediction],{xs:x_data,ys:y_data})
if i%500==0:
# #print(sess.run(loss,feed_dict={xs:x_data,ys:y_data}))
# try:
# ax.lines.remove(lines[0])
# except Exception:
# pass
# prediction_value = sess.run(prediction,feed_dict={xs:x_data})
# lines = ax.plot(x_data,prediction_value,"r-",lw=5)
# plt.pause(0.1)
plt.cla()
plt.scatter(x_data,y_data)
plt.plot(x_data,pred,'r-',lw=5)
plt.text(0.5,0,"loss=%.4f"%l,fontdict={'size': 20,'color':'red'})
plt.pause(0.1)
plt.ioff()
plt.show()
参考文献
【1】莫烦系列视频