**
1、实现线性回归
**
#!/usr/bin/python3
# -*- coding:utf-8 -*-
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
"""
实现线性回归
"""
# 数据
train_x=np.random.random([100,1]).astype(np.float32)
train_y=3.*train_x+5.
x=tf.placeholder(tf.float32,[100,1],'x')
y_=tf.placeholder(tf.float32,[100,1],'y')
with tf.variable_scope('wb'):
w=tf.get_variable('w',(1,1),dtype=tf.float32,initializer=tf.random_uniform_initializer)
b=tf.Variable(0.0,dtype=tf.float32)
y=tf.add(tf.matmul(x,w),b)
# loss function
loss=tf.reduce_mean(tf.reduce_sum(tf.square(y-y_)))
train_op=tf.train.GradientDescentOptimizer(0.001).minimize(loss)
sess=tf.InteractiveSession(graph=tf.get_default_graph())
tf.global_variables_initializer().run()
for step in range(1000):
sess.run(train_op,feed_dict={x:train_x,y_:train_y})
if step%100==0:
print('w',w.eval(),'b',b.eval())
a=w.eval()
b=b.eval()
plt.figure()
plt.scatter(train_x,train_y,s=30,c='red',marker='o',alpha=0.5,label='C1')
plt.plot(train_x,train_x*a+b)
plt.show()
sess.close()
2、数据中加入随机噪声
train_y=train_y+np.random.random([100,1])
结果:
可以看出随机噪声对其影响不大,其实随机误差对神经网络的影响不大,但系统误差对神经网络影响较大,因此在训练样本时都需要随机打乱样本
3、加入少量错误的样本
train_x=np.random.random([100,1]).astype(np.float32)
train_y=3.*train_x+5.
train_x1=np.random.random([10,1]).astype(np.float32)
train_y1=4.*train_x1+6.
train_x=np.vstack((train_x,train_x1))
train_y=np.vstack((train_y,train_y1))
结果:
从上面的结果可以看出,如果样本中存在错误的标签,而错误样本占总样本数比例很小,其影响可以忽略。
因此,在制作样本时,如果有少量样本贴错了标签,但占总样本数比例不大,其实是可以忽略,如果占的比重较大,就需要手工查找更正,或者增加更多的样本