飞道的博客

Tensorflow搭建一个神经网络

276人阅读  评论(0)

一、Tensorlow结构


  
  1. import tensorflow as tf
  2. import numpy as np
  3. #创建数据
  4. x_data = np.random.rand( 100).astype(np.float32)
  5. y_data = x_data* 0.1+ 0.3
  6. #创建一个 tensorlow 结构
  7. weights = tf.Variable(tf.random_uniform([ 1], -1.0, 1.0)) #一维,范围[-1,1]
  8. biases = tf.Variable(tf.zeros([ 1]))
  9. y = weights*x_data + biases
  10. loss = tf.reduce_mean(tf.square(y - y_data)) #均方差函数
  11. #建立优化器,减少误差,提高参数准确度,每次迭代都会优化
  12. optimizer = tf.train.GradientDescentOptimizer( 0.5) #学习率为0.5(<1)
  13. train = optimizer.minimize(loss) #最小化损失函数
  14. #初始化不变量
  15. init = tf.global_variables_initializer()
  16. with tf.Session() as sess:
  17. sess.run(init)
  18. #train
  19. for step in range( 201):
  20. sess.run(train)
  21. if step % 20 == 0:
  22. print(step, sess.run(weights), sess.run(biases))

二、session的使用


  
  1. import tensorflow as tf
  2. matrix1 = tf.constant([[ 3, 3]])
  3. matrix2 = tf.constant([[ 2], [ 2]])
  4. product = tf.matmul(matrix1, matrix2)
  5. #method1
  6. sess = tf.Session()
  7. result2 = sess.run(product)
  8. print(result2)
  9. #method2
  10. # with tf.Session() as sess:
  11. # result2 = sess.run(product)
  12. # print(result2)

三、Variable的使用


  
  1. import tensorflow as tf
  2. state = tf.Variable( 0, name = 'counter') #变量初始化
  3. # print(state.name)
  4. one = tf.constant( 1)
  5. new_value = tf.add(state, one)
  6. #将state用new_value代替
  7. updata = tf.assign(state, new_value)
  8. #变量激活
  9. init = tf.global_variables_initializer()
  10. with tf.Session() as sess:
  11. sess.run(init)
  12. for _ in range( 3):
  13. sess.run(updata)
  14. print(sess.run(state))

四、placeholder的使用


  
  1. #给定type,tf大部分只能处理float32数据
  2. input1 = tf.placeholder(tf.float32)
  3. input2 = tf.placeholder(tf.float32)
  4. output = tf.multiply(input1, input2)
  5. with tf.Session() as sess:
  6. print(sess.run(output, feed_dict={input1:[ 7.], input2:[ 2.]}))

五、激活函数

六、添加层


  
  1. import tensorflow as tf
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. def add_layer(inputs, in_size, out_size, activation_function = None):
  5. Weights = tf.Variable(tf.random_normal([in_size, out_size])) #正态分布
  6. biases = tf.Variable(tf.zeros([ 1, out_size])+ 0.1) #1行,out_size列,初始值不推荐为0,所以加上0.1
  7. Wx_plus_b = tf.matmul(inputs, Weights) + biases #Weights*x+b的初始化值,也是未激活的值
  8. #激活
  9. if activation_function is None:
  10. #如果没有设置激活函数,,则直接把当前信号原封不动的传递出去
  11. outputs = Wx_plus_b
  12. else:
  13. #如果设置了激活函数,则由此激活函数对信号进行传递或抑制
  14. outputs = activation_function(Wx_plus_b)
  15. return outputs

七、创建一个神经网络


  
  1. import tensorflow as tf
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. def add_layer(inputs, in_size, out_size, activation_function = None):
  5. Weights = tf.Variable(tf.random_normal([in_size, out_size])) #正态分布
  6. biases = tf.Variable(tf.zeros([ 1, out_size])+ 0.1) #1行,out_size列,初始值不推荐为0,所以加上0.1
  7. Wx_plus_b = tf.matmul(inputs, Weights) + biases #Weights*x+b的初始化值,也是未激活的值
  8. #激活
  9. if activation_function is None:
  10. #如果没有设置激活函数,,则直接把当前信号原封不动的传递出去
  11. outputs = Wx_plus_b
  12. else:
  13. #如果设置了激活函数,则由此激活函数对信号进行传递或抑制
  14. outputs = activation_function(Wx_plus_b)
  15. return outputs
  16. """定义数据形式"""
  17. #创建一列(相当于只有一个属性值),(-1,1)之间,有300个单位,后面是维度,x_data是有300行
  18. x_data = np.linspace( -1, 1, 300)[:, np.newaxis] #np.linspace在指定间隔内返回均匀间隔数字
  19. #加入噪声,均值为0,方差为0.05,形状和x_data一样
  20. noise = np.random.normal( 0, 0.05, x_data.shape)
  21. #定义y的函数为二次曲线函数,同时增加一些噪声数据
  22. y_data = np.square(x_data) - 0.5 + noise
  23. #定义输入值,输入结构的输入行数不固定,但列就是1列的值
  24. xs = tf.placeholder(tf.float32, [ None, 1])
  25. ys = tf.placeholder(tf.float32, [ None, 1])
  26. """建立网络"""
  27. #定义隐藏层,输入为xs,输入size为1列,因为x_data只有一个属性值,输出size假定有10个神经元的隐藏层,激活函数relu
  28. l1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu)
  29. #定义输出层,输出为l1输入size为10列,也就是l1的列数,输出size为1,这里的输出类似y_data,因此为1列
  30. prediction = add_layer(l1, 10, 1,activation_function= None)
  31. """预测"""
  32. #定义损失函数为差值平方和的平均值
  33. loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction),reduction_indices=[ 1]))
  34. """训练"""
  35. #进行逐步优化的梯度下降优化器,学习率为0.1,以最小化损失函数进行优化
  36. train_step = tf.train.GradientDescentOptimizer( 0.1).minimize(loss)
  37. #初始化模型所有参数
  38. init = tf.global_variables_initializer()
  39. #可视化
  40. with tf.Session() as sess:
  41. sess.run(init)
  42. for i in range( 1000): #学习1000次
  43. sess.run(train_step, feed_dict={xs:x_data, ys:y_data})
  44. if i% 50== 0:
  45. print(sess.run(loss, feed_dict={xs:x_data, ys:y_data}))

八、可视化


  
  1. import tensorflow as tf
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. def add_layer(inputs, in_size, out_size, activation_function = None):
  5. Weights = tf.Variable(tf.random_normal([in_size, out_size])) #正态分布
  6. biases = tf.Variable(tf.zeros([ 1, out_size])+ 0.1) #1行,out_size列,初始值不推荐为0,所以加上0.1
  7. Wx_plus_b = tf.matmul(inputs, Weights) + biases #Weights*x+b的初始化值,也是未激活的值
  8. #激活
  9. if activation_function is None:
  10. #如果没有设置激活函数,,则直接把当前信号原封不动的传递出去
  11. outputs = Wx_plus_b
  12. else:
  13. #如果设置了激活函数,则由此激活函数对信号进行传递或抑制
  14. outputs = activation_function(Wx_plus_b)
  15. return outputs
  16. """定义数据形式"""
  17. #创建一列(相当于只有一个属性值),(-1,1)之间,有300个单位,后面是维度,x_data是有300行
  18. x_data = np.linspace( -1, 1, 300)[:, np.newaxis] #np.linspace在指定间隔内返回均匀间隔数字
  19. #加入噪声,均值为0,方差为0.05,形状和x_data一样
  20. noise = np.random.normal( 0, 0.05, x_data.shape)
  21. #定义y的函数为二次曲线函数,同时增加一些噪声数据
  22. y_data = np.square(x_data) - 0.5 + noise
  23. #定义输入值,输入结构的输入行数不固定,但列就是1列的值
  24. xs = tf.placeholder(tf.float32, [ None, 1])
  25. ys = tf.placeholder(tf.float32, [ None, 1])
  26. """建立网络"""
  27. #定义隐藏层,输入为xs,输入size为1列,因为x_data只有一个属性值,输出size假定有10个神经元的隐藏层,激活函数relu
  28. l1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu)
  29. #定义输出层,输出为l1输入size为10列,也就是l1的列数,输出size为1,这里的输出类似y_data,因此为1列
  30. prediction = add_layer(l1, 10, 1,activation_function= None)
  31. """预测"""
  32. #定义损失函数为差值平方和的平均值
  33. loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction),reduction_indices=[ 1]))
  34. """训练"""
  35. #进行逐步优化的梯度下降优化器,学习率为0.1,以最小化损失函数进行优化
  36. train_step = tf.train.GradientDescentOptimizer( 0.1).minimize(loss)
  37. #初始化模型所有参数
  38. init = tf.global_variables_initializer()
  39. #可视化
  40. with tf.Session() as sess:
  41. sess.run(init)
  42. fig = plt.figure() #先生成一个图片框
  43. #连续性画图
  44. ax = fig.add_subplot( 1, 1, 1) #编号为1,1,1
  45. ax.scatter(x_data, y_data) #画散点图
  46. #不暂停
  47. plt.ion() #打开互交模式
  48. # plt.show()
  49. #plt.show绘制一次就暂停了
  50. for i in range( 1000): #学习1000次
  51. sess.run(train_step, feed_dict={xs:x_data, ys:y_data})
  52. if i% 50== 0:
  53. try:
  54. #画出一条后,抹除掉,去除第一个线段,但是只有一个相当于抹除当前线段
  55. ax.lines.remove(lines[ 0])
  56. except Exception:
  57. pass
  58. prediction_value = sess.run(prediction, feed_dict={xs:x_data})
  59. lines = ax.plot(x_data,prediction_value, 'r-',lw= 5) #lw线宽
  60. #暂停
  61. plt.pause( 0.5)

可视化结果:

 


转载:https://blog.csdn.net/AI_girl/article/details/116768363
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场