参考

科普

cuda安装

  • 什么是cuda

    CUDA ®是 NVIDIA 发明的并行计算平台和编程模型。它通过利用图形处理单元 (GPU) 的强大功能来显着提高计算性能。

    CUDA 的开发考虑了几个设计目标:

    • 为标准编程语言(如 C)提供一小组扩展,可以直接实现并行算法。使用 CUDA C/C+++,程序员可以专注于算法的并行化任务,而不是花时间在它们的实现上。
    • 支持应用程序同时使用 CPU 和 GPU 的异构计算。应用程序的串行部分在 CPU 上运行,并行部分卸载到 GPU。因此,CUDA 可以逐步应用于现有应用程序。CPU 和 GPU 被视为具有自己的内存空间的独立设备。此配置还允许在 CPU 和 GPU 上同时进行计算,而不会争用内存资源。

    支持 CUDA 的 GPU 拥有数百个内核,可以共同运行数千个计算线程。这些内核具有共享资源,包括寄存器文件和共享内存。片上共享内存允许在这些内核上运行的并行任务共享数据,而无需通过系统内存总线发送数据。

    本指南将向您展示如何安装和检查 CUDA 开发工具的正确运行。

  • 查看自己GPU适配的cuda版本https://blog.csdn.net/YMMMAR/article/details/121982042

  • 下载地址 链接

Tensoflow安装

tensoflow计算图

  • gradient 梯度

神经网络结构

一个预测函数的例子

函数的的形式为:

y=x0.1+0.3y = x *0.1 + 0.3

"""
Please note, this code is only for python 3+. If you are using python 2+, please modify the code accordingly.
"""
from __future__ import print_function
import tensorflow as tf
import numpy as np
import tensorflow.compat.v1 as tf

tf.disable_v2_behavior()

# create data 创建随机数据x
x_data = np.random.rand(100).astype(np.float32)
# 去预测的参数分别是0.1和0.3
y_data = x_data * 0.1 + 0.3

# 开始创建神经网络的结构 #
# create tensorflow structure start #
# 下面的W大写表示是矩阵,Variable表示参数变量
# tf.random.uniform([1], -1.0, 1.0) 1维,生成范围为-1到1
Weights = tf.Variable(tf.random.uniform([1], -1.0, 1.0))
# 神经网络就是将初始值逐渐靠近要做的事情
biases = tf.Variable(tf.zeros([1])) # 设置初始值为0

# 预测的y值
y = Weights * x_data + biases

# 存在误差loss
loss = tf.reduce_mean(tf.square(y - y_data))
# 创建一个优化器,使得loss减少,参数为学习效率0-1,即梯度下降优化
# 代码是依据t1版本的,但是一般安装的是t2,要做一点修改https://blog.csdn.net/zkw_1998/article/details/120830121
tf.compat.v1.disable_eager_execution() # 这一行的意思是使得之前版本的方法可以执行
# 因为存在误差,因此需要一个优化器(有很多种,这个为梯度下降,参数是学习效率),来减少误差
optimizer = tf.compat.v1.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss) # 训练,每一步都执行,减小误差,使得误差减到最小,这就是神经网路的根本

### create tensorflow structure end ###
# 会话
sess = tf.compat.v1.Session()
# tf.initialize_all_variables() no long valid from
# 2017-03-02 if using tensorflow >= 0.12
# 虽然上面建立了变量,但是在神经网络种还没有初始化我们的变量
if int((tf.__version__).split('.')[1]) < 12 and int((tf.__version__).split('.')[0]) < 1:
init = tf.compat.v1.initialize_all_variables()
else:
init = tf.compat.v1.global_variables_initializer()
# 指针指向我处理的地方,处理的地方被激活
sess.run(init)
# 使得神经网络一步步训练
for step in range(201):
sess.run(train)
if step % 20 == 0:
print(step, sess.run(Weights), sess.run(biases))

Session会话的控制

  • 用于控制运算过程,等到数据准备好再运算
"""
Please note, this code is only for python 3+. If you are using python 2+, please modify the code accordingly.
"""
from __future__ import print_function
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
matrix1 = tf.constant([[3, 3]])
matrix2 = tf.constant([[2],
[2]])
product = tf.matmul(matrix1, matrix2) # matrix multiply np.dot(m1, m2)

# method 1
sess = tf.compat.v1.Session()
result = sess.run(product) # 只有run了之后才进行运算
print(result)
sess.close()

# method 2
with tf.compat.v1.Session() as sess:
result2 = sess.run(product) # 只有run了之后才进行运算
print(result2)

Variable定义

  • tf中的变量定义
from __future__ import print_function
import tensorflow as tf

tf.compat.v1.disable_eager_execution()
state = tf.Variable(0, name='counter') # 变量值为0,名字为counter
# print(state.name)
one = tf.constant(1) # 定义一个常量,值为1

new_value = tf.add(state, one) # 通过加法获得一个新的值
update = tf.compat.v1.assign(state, new_value) # 将新值更新到state

# tf.initialize_all_variables() no long valid from
# 2017-03-02 if using tensorflow >= 0.12
# 这里是判断版本的,确保程序成功运行
if int((tf.__version__).split('.')[1]) < 12 and int((tf.__version__).split('.')[0]) < 1:
init = tf.compat.v1.initialize_all_variables()
else:
init = tf.compat.v1.global_variables_initializer()

with tf.compat.v1.Session() as sess:
sess.run(init)
for _ in range(3):
sess.run(update) # 每执行一次就加一
print(sess.run(state))
# 输出
# 1
# 2
# 3