AI - TensorFlow - 第一个神经网络(First Neural Network)
2023-09-14 09:00:40 时间
Hello world
1 # coding=utf-8 2 import tensorflow as tf 3 import os 4 5 os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' 6 7 try: 8 tf.contrib.eager.enable_eager_execution() 9 print("TF imported with eager execution!") 10 except ValueError: 11 print("TF already imported with eager execution!") 12 13 tensor = tf.constant('Hello, world!') 14 tensor_value = tensor.numpy() 15 print(tensor_value) 16 17 # ### Eager Execution 18 # https://www.tensorflow.org/guide/eager?hl=zh-cn 19 # https://www.tensorflow.org/api_docs/python/tf/enable_eager_execution 20 # TensorFlow的“Eager Execution”是一个命令式、由运行定义的接口,一旦从 Python 被调用可立即执行操作; 21 # - 操作会返回具体的值,而不是构建以后再运行的计算图; 22 # - 能够轻松地开始使用TensorFlow和调试模型,并且还减少了样板代码; 23 # - 使得 TensorFlow 的入门变得更简单,也使得研发工作变得更直观;
运行结果:
TF imported with eager execution!
b'Hello, world!'
建造第一个神经网络
1 # coding=utf-8 2 import tensorflow as tf 3 import numpy as np 4 import matplotlib.pyplot as plt 5 import os 6 7 os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' 8 9 10 # ### 添加神经层 11 12 13 def add_layer(inputs, in_size, out_size, activation_function=None): # 构造添加神经层的函数,这里设定默认激励函数为None 14 Weights = tf.Variable(tf.random_normal([in_size, out_size])) # 定义weights:为一个in_size行, out_size列的随机变量矩阵 15 biases = tf.Variable(tf.zeros([1, out_size]) + 0.1) # 定义biases:在机器学习中biases的推荐值不为0 16 Wx_plus_b = tf.matmul(inputs, Weights) + biases # 定义Wx_plus_b:神经网络未激活的值;tf.matmul()是矩阵的乘法 17 if activation_function is None: # 当激励函数为None时,输出当前的预测值Wx_plus_b 18 outputs = Wx_plus_b 19 else: # 不为None时,将Wx_plus_b传到activation_function()函数得到输出 20 outputs = activation_function(Wx_plus_b) 21 return outputs # 返回输出 22 23 24 # ### 构建数据 25 x_data = np.linspace(-1, 1, 300, dtype=np.float32)[:, np.newaxis] # 构建数据x_data 26 noise = np.random.normal(0, 0.05, x_data.shape).astype(np.float32) # 构建噪声数据noise,模拟真实情况 27 y_data = np.square(x_data) - 0.5 + noise # 构建数据y_data 28 29 # ### 搭建网络 30 xs = tf.placeholder(tf.float32, [None, 1]) # 利用占位符定义神经网络的输入 31 ys = tf.placeholder(tf.float32, [None, 1]) # None代表无论输入有多少都可以,1表示输入只有一个特征 32 h1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu) # 定义隐藏层,10个神经元,激励函数使用TensorFlow自带的tf.nn.relu 33 prediction = add_layer(h1, 10, 1, activation_function=None) # 定义输出层(预测层),输出一个结果 34 loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction), 35 reduction_indices=[1])) # 计算预测值prediction和真实值的误差,对二者差的平方求和再取平均 36 train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) # 选择Optimizer来最小化误差loss,以0.1的效率 37 init = tf.global_variables_initializer() # 使用变量前,必须初始化 38 sess = tf.Session() # 定义Session 39 sess.run(init) # 执行init初始化步骤 40 41 # ### 结果可视化 42 fig = plt.figure() # 创建图形实例 43 ax = fig.add_subplot(1, 1, 1) # 创建子图,作为1行1列图形矩阵中的第1个subplot 44 ax.scatter(x_data, y_data) # 绘制散点图 45 plt.ion() # 打开交互模式 46 plt.show() # 显示图形 47 48 # ### 训练 49 for i in range(1000): # 学习次数1000 50 sess.run(train_step, feed_dict={xs: x_data, ys: y_data}) # 学习内容是train_step 51 if i % 50 == 0: # 每隔50次训练输出机器学习的误差和刷新一次图形 52 print("loss: {}".format(sess.run(loss, feed_dict={xs: x_data, ys: y_data}))) 53 try: 54 ax.lines.remove(lines[0]) 55 except Exception: 56 pass 57 prediction_value = sess.run(prediction, feed_dict={xs: x_data}) 58 lines = ax.plot(x_data, prediction_value, 'r-', lw=5) # 用红色、宽度为5的线来显示预测数据和输入之间的关系 59 plt.pause(0.2) # 暂停0.2秒 60 61 # ### 添加神经层 62 # 通过在TensorFlow中定义一个添加层的函数,可以添加神经层; 63 # 神经层里常见的参数通常有weights、biases和激励函数等; 64 # 添加神经层的函数def add_layer()有四个参数:输入值、输入的大小、输出的大小和激励函数; 65 # 66 # ### 构建数据 67 # 模拟真实数据; 68 # 69 # ### 搭建网络 70 # 神经网络(输入层1个、隐藏层10个、输出层1个); 71 # 72 # ### 训练 73 # 机器学习的内容是train_step, 用Session来run每一次training的数据,逐步提升神经网络的预测准确性; 74 # 注意:当运算要用到placeholder时,就需要feed_dict这个字典来指定输入; 75 # 76 # ### 可视化 77 # 利用matplotlib模块绘制和显示图形;
某一次的运行过程中的图形显示:
某一次的命令行输出:
1 loss: 0.05769985169172287 2 loss: 0.007242309395223856 3 loss: 0.004746056627482176 4 loss: 0.004090217407792807 5 loss: 0.0037425532937049866 6 loss: 0.0035221632570028305 7 loss: 0.003357301466166973 8 loss: 0.0032187148462980986 9 loss: 0.0031040285248309374 10 loss: 0.0030171412508934736 11 loss: 0.0029463612008839846 12 loss: 0.002890094416216016 13 loss: 0.0028497371822595596 14 loss: 0.002820496214553714 15 loss: 0.0027967311907559633 16 loss: 0.002780070761218667 17 loss: 0.0027664629742503166 18 loss: 0.00275203469209373 19 loss: 0.002737578935921192 20 loss: 0.002723217708989978
相关文章
- 【华为云技术分享】云图说 | 华为云智能边缘平台IEF:智能边缘 让AI触手可及
- 解锁云原生 AI 技能 - 开发你的机器学习工作流
- AI - TensorFlow - 第一个神经网络(First Neural Network)
- AI之FL:联邦学习(Federated Learning,分布式机器学习技术)的分类详解(纵向联邦学习/横向联邦学习)、使用方法、实战案例之详细攻略
- DataScience/NLP/CV:在AI算法中,如何处理时序性数据—对比CNN、RNN、Transformer算法优劣
- AI&BlockChain:“知名博主独家讲授”人工智能创新应用竞赛【精选实战作品】之《基于计算机视觉、自然语言处理和区块链技术的乘客智能报警系统》案例的界面简介、功能介绍分享之自然语言处理技术
- AI之API:人工智能领域之国内外各大人工智能平台(百度云/华为云/阿里云/Face++等)及其API的简介、使用方法之详细攻略
- AI公开课:18.05.16 周明博士(MSRA副院长)—北大AI第十一讲之《语言智能的进展》课堂笔记——你了解语言智能
- BigData:根据最新2018人工智能行业创新企业Top100名单,绘制AI行业VC最AI的热门领域(投资领域)
- AI本质就是“暴力计算”?看华为云如何应对算力挑战
- 【华为云技术分享】云图说|华为HiLens:端云协同多模态AI开发应用平台
- 【读一本书】《昇腾AI处理器架构与编程》--神经网络基础知识(2)
- 【AI人工智能绘画 CV】Towards Robust Blind Face Restoration with Codebook Lookup Transformer
- 【人工智能AI】MaaS:模型即服务的未来已来
- AI学习之路(20)占位符(placeholder)的使用
- 现代英特尔® 架构上的 TensorFlow* 优化——正如去年参加Intel AI会议一样,Intel自己提供了对接自己AI CPU优化版本的Tensorflow,下载链接见后,同时可以基于谷歌官方的tf版本直接编译生成安装包