本站消息

  出租广告位,需要合作请联系站长

  今日名言-想象你自己对困难作出的反应,不是逃避或绕开它们,而是面对它们,同它们打交道,以一种进取的和明智的方式同它们奋斗 。——马克斯威尔·马尔兹

  今日名言-用谅解、宽恕的目光和心理看人、待人。人就会觉得葱笼的世界里,春意盎然,到处充满温暖。——蔡文甫


+关注
已关注

分类  

python(8)

java(2)

标签  

python(5)

java(1)

日期归档  

暂无数据

Tensorflow深度学习与应用笔记《1》Day8

发布于2021-07-25 07:36     阅读(1099)     评论(0)     点赞(1)     收藏(4)


        首先简单介绍一下Tensorflow ,它是谷歌第二代人工学习系统,支持python和C++,底层是用C++写的,使用的时候是python,是一个深度学习平台。

目录

1-1.Tensorflow基本概念

1-2.Tensorflow结构

2-1.创建图,启动图

2-2.Tensorflow中的变量

2-3.Tensorflow中的Fetch和Feed

2-4.Tensorflow简单示例

3-1.非线性回归示例

训练数据

构建一个神经网络,用来计算给定x的值,预测y的值

3-2.MNIST数据集分类简单版本

MNIST数据集

Softmax函数

MNIST数据集简单版本

优化代码


1-1.Tensorflow基本概念

1-2.Tensorflow结构

2-1.创建图,启动图

import tensorflow as tf
  1. #创建一个常量op
  2. m1 = tf.constant([[3,3]])
  3. #创建一个常量op
  4. m2 = tf.constant([[2],[3]])
  5. #创建一个矩阵乘法op,把m1和m2传入
  6. product = tf.matmul(m1,m2)
  7. print(product)

输出:

  1. #定义一个会话,启动默认图
  2. sess = tf.Session()
  3. #调用sess的run方法来执行矩阵乘法op
  4. #run(product)触发了图中3个op
  5. result = sess.run(product)
  6. print(result)
  7. sess.close()
  1. with tf.Session()
  2. #调用sess的run方法来执行矩阵乘法op
  3. #run(product)触发了图中3个op
  4. result = sess.run(product)
  5. print(result)

输出 :

2-2.Tensorflow中的变量

import tensorflow as tf
  1. x = tf.Variable([1,2])
  2. a = tf.constant([3,3])
  3. # 增加一个减法op
  4. sub = tf.subtract(x,a)
  5. # 增加一个加法op
  6. add = tf.add(a,sub)
  7. # 全局变量初始化
  8. init = tf.global_variables_initializer()
  1. with tf.Session() as sess:
  2. sess.run(init)
  3. print(x.value)
  4. print(sess.run(sub))
  5. print(sess.run(add))

输出:

  1. # 创建一个变量,初始化为0
  2. state = tf.Variable(0, name='counter')
  3. # 创建一个op
  4. new_value = tf.add(state,1)
  5. # 赋值op
  6. update = tf.assign(state,new_value)
  7. # 初始化全局变量
  8. init = tf.global_variables_initializer()
  9. # 变量初始化为0,循环更新并打印
  10. with tf.Session() as sess:
  11. sess.run(init)
  12. print(sess.run(state))
  13. for _ in range(5):
  14. sess.run(update)
  15. print(sess.run(state))

输出:

 注意:

 原因是尝试使用没有初始化的变量,解决方法:执行初始化操作:

init = tf.global_variables_initializer() 是全局变量的初始化

2-3.Tensorflow中的Fetch和Feed

 Fetch可以在会话里执行多个op,得到结果

import tensorflow as tf
  1. input1 = tf.constant(3.0)
  2. input2 = tf.constant(2.0)
  3. input3 = tf.constant(5.0)
  4. add = tf.add(input2,input3)
  5. mul = tf.multiply(input1,add)
  6. with tf.Session() as sess:
  7. result = sess.run([mul, add])
  8. print((result))

输出:

feed可以每次给图传入不同的数据

  1. # 创建占位符
  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. # feed数据以字典形式传入
  7. print(sess.run(output, feed_dict={input1:[2.0],input2:[6.0]}))

输出:

2-4.Tensorflow简单示例

  1. import tensorflow as tf
  2. import numpy as np
  1. # 生成随机点
  2. x_data = np.random.rand(100)
  3. y_data = x_data*0.1 + 0.2
  4. # 构建线性模型
  5. b = tf.Variable(0.)
  6. k = tf.Variable(0.)
  7. y = k*x_data + b
  8. # 定义损失函数
  9. loss = tf.reduce_mean(tf.square(y_data-y))
  10. # 定义一个梯度下降法进行训练的优化器,学习率是0.2
  11. optimizer = tf.train.GradientDescentOptimizer(0.2)
  12. # 最小化代价函数
  13. train = optimizer.minimize(loss)
  14. # 变量初始化
  15. init = tf.global_variables_initializer()
  16. with tf.Session() as sess:
  17. sess.run(init)
  18. for step in range(201):
  19. sess.run(train)
  20. if step%20 == 0:
  21. print(step+1, sess.run([k,b]))

输出:

3-1.非线性回归示例

  1. import tensorflow as tf
  2. import numpy as np
  3. import matplotlib.pyplot as plt

训练数据

  1. # 生成200个随机点,并改变其形状为200*1
  2. x_data = np.linspace(-0.5, 0.5, 200)[:,np.newaxis]
  3. noise = np.random.normal(0,0.02,x_data.shape)
  4. y_data = np.square(x_data) + noise
  5. #查看一下数据形状
  6. print(x_data.shape)
  7. type(x_data)
  8. print(noise.shape)

 输出:

 构建一个神经网络,用来计算给定x的值,预测y的值

  1. # 定义两个placeholder
  2. x = tf.placeholder(tf.float32, [None,1])
  3. y = tf.placeholder(tf.float32, [None,1])
  4. # 定义中间层
  5. Weights_L1 = tf.Variable(tf.random_normal([1,10]))
  6. bias_L1 = tf.Variable(tf.zeros([1,10]))
  7. Wx_plus_b_L1 = tf.matmul(x, Weights_L1) + bias_L1
  8. # 激活函数
  9. L1 = tf.nn.tanh(Wx_plus_b_L1)
  10. # 定义输出层
  11. Weights_L2 = tf.Variable(tf.random_normal([10,1]))
  12. bias_L2 = tf.Variable(tf.zeros([1,1]))
  13. Wx_plus_b_L2 = tf.matmul(L1,Weights_L2) + bias_L2
  14. prediction = tf.nn.tanh(Wx_plus_b_L2)
  15. # 二次代价函数(损失函数)
  16. loss = tf.reduce_mean(tf.square(y-prediction))
  17. # 梯度下降法
  18. train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
  19. with tf.Session() as sess:
  20. # 变量的初始化
  21. sess.run(tf.global_variables_initializer())
  22. for _ in range(2000):
  23. sess.run(train_step, feed_dict={x:x_data, y:y_data})
  24. # 获得预测值
  25. prediction_value = sess.run(prediction,feed_dict={x:x_data})
  26. plt.figure()
  27. plt.scatter(x_data, y_data)
  28. plt.plot(x_data, prediction_value,'r-', lw=5)
  29. plt.show()

输出:

 3-2.MNIST数据集分类简单版本

MNIST数据集

 

 Softmax函数

 MNIST数据集简单版本

  1. import tensorflow as tf
  2. from tensorflow.examples.tutorials.mnist import input_data
  1. # 载入数据
  2. mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
  1. # 批次的大小
  2. batch_size = 128
  3. n_batch = mnist.train.num_examples // batch_size
  4. x = tf.placeholder(tf.float32, [None,784])
  5. y = tf.placeholder(tf.float32, [None, 10])
  6. # 创建一个简单的神经网络
  7. W = tf.Variable(tf.zeros([784,10]))
  8. b = tf.Variable(tf.zeros([1, 10]))
  9. prediction = tf.nn.softmax(tf.matmul(x,W) + b)
  10. # 代价函数
  11. loss = tf.reduce_mean(tf.square(y-prediction))
  12. # 梯度下降法
  13. train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)
  14. # 初始化变量
  15. init = tf.global_variables_initializer()
  16. # 得到一个布尔型列表,存放结果是否正确
  17. correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(prediction,1)) #argmax 返回一维张量中最大值索引
  18. # 求准确率
  19. accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) # 把布尔值转换为浮点型求平均数
  20. with tf.Session() as sess:
  21. sess.run(init)
  22. for epoch in range(21):
  23. for batch in range(n_batch):
  24. # 获得批次数据
  25. batch_xs, batch_ys = mnist.train.next_batch(batch_size)
  26. sess.run(train_step, feed_dict={x:batch_xs, y:batch_ys})
  27. acc = sess.run(accuracy, feed_dict={x:mnist.test.images,y:mnist.test.labels})
  28. print("Iter " + str(epoch) + " Testing Accuracy: " + str(acc))

输出:

优化代码

  • 三层网络,添加激活层、drop层,使用交叉熵计算loss
  1. # 批次的大小
  2. batch_size = 128
  3. n_batch = mnist.train.num_examples // batch_size
  4. x = tf.placeholder(tf.float32, [None,784])
  5. y = tf.placeholder(tf.float32, [None, 10])
  6. keep_prob = tf.placeholder(tf.float32)
  7. # 创建神经网络
  8. W1 = tf.Variable(tf.truncated_normal([784,2000],stddev=0.1))
  9. b1 = tf.Variable(tf.zeros([1, 2000]))
  10. # 激活层
  11. layer1 = tf.nn.relu(tf.matmul(x,W1) + b1)
  12. # drop层
  13. layer1 = tf.nn.dropout(layer1,keep_prob=keep_prob)
  14. # 第二层
  15. W2 = tf.Variable(tf.truncated_normal([2000,500],stddev=0.1))
  16. b2 = tf.Variable(tf.zeros([1, 500]))
  17. layer2 = tf.nn.relu(tf.matmul(layer1,W2) + b2)
  18. layer2 = tf.nn.dropout(layer2,keep_prob=keep_prob)
  19. # 第三层
  20. W3 = tf.Variable(tf.truncated_normal([500,10],stddev=0.1))
  21. b3 = tf.Variable(tf.zeros([1,10]))
  22. prediction = tf.nn.sigmoid(tf.matmul(layer2,W3) + b3)
  23. loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=prediction))
  24. # 梯度下降法
  25. train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)
  26. # 初始化变量
  27. init = tf.global_variables_initializer()
  28. # 计算准确率
  29. prediction_2 = tf.nn.softmax(prediction)
  30. # 得到一个布尔型列表,存放结果是否正确
  31. correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(prediction_2,1)) #argmax 返回一维张量中最大值索引
  32. # 求准确率
  33. accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) # 把布尔值转换为浮点型求平均数
  34. with tf.Session() as sess:
  35. sess.run(init)
  36. for epoch in range(60):
  37. for batch in range(n_batch):
  38. # 获得批次数据
  39. batch_xs, batch_ys = mnist.train.next_batch(batch_size)
  40. sess.run(train_step, feed_dict={x:batch_xs, y:batch_ys, keep_prob:0.8})
  41. acc = sess.run(accuracy, feed_dict={x:mnist.test.images,y:mnist.test.labels,keep_prob:1.0} )
  42. print("Iter " + str(epoch) + " Testing Accuracy: " + str(acc))

输出:

⭐⭐⭐持续更新.....

⭐⭐⭐每天提醒自己,自己就是个菜鸡!

⭐⭐⭐已经看到最后啦,如果对您有帮助留下的每一个点赞、收藏、关注是对菜鸡创作的最大鼓励❀

⭐⭐⭐有相关问题可以写在评论区,一起学习,一起进步

原文链接:https://blog.csdn.net/Hdhdi/article/details/119042199



所属网站分类: 技术文章 > 博客

作者:小酷狗

链接:http://www.pythonpdf.com/blog/article/505/7069c65083b56842b460/

来源:编程知识网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

1 0
收藏该文
已收藏

评论内容:(最多支持255个字符)