win10/11-tesorflow1.x环境安装简记

部署运行你感兴趣的模型镜像

win10安装的相关环境:

电脑华硕ASUS
系统win10家庭中文版
显卡NVIDIA Geforce 940MX
Tensorflow1.15.0
Pycharm2020.1.1
Python3.7
AnacondaAnaconda3-2020.11_windows_x86_64
Cuda10.0
Cudnnv7.4.2

问题记录:由于学习的深度代码是基于tensorflow1.x版本的实现的,我又不想升级到tensorflow2.x版本的代码,加上个人电脑这配置找到的资料也少,所以简单记录下安装流程
具体安装教程:
step1:先看电脑的显卡信息,“此电脑(鼠标右击)”-“管理”-“设备管理器”-“显示适配器”
在这里插入图片描述
在这里插入图片描述
step2:查看Geforce 940支持的cuda版本,目前电脑驱动升级自动把低版本卸载了,所以无法提供最初的界面,这边给个相关链接,写的很详细,下面是我的电脑结果图
在这里插入图片描述
可以看到我目前电脑的最高支持cuda11.0.208
step3:检查tensorflow,cuda,cudnn对应关系的官网链接
在这里插入图片描述
step4:下载上图中标记出的cudnn和cuda
cuda的官网链接,cudnn的官网链接,然后是下载教程的文字操作版视频操作版
在这里插入图片描述
在这里插入图片描述
step5:安装anaconda3,可以直接安装最新的或者根据python版本下载,相关操作教程的链接1或者链接2都可以
在这里插入图片描述
step6:conda创建个人环境直接通过anconda navigator图形化界面就行,图形化界面链接
注意 我碰到过anaconda图形化界面和命令行里面对不上,这时候以命令行里面为准,所以还是贴一个命令行的 命令行操作链接
pycharm引用conda环境的 操作链接
问题:检测GPU是否可用时程序报错,原文链接
测试代码:

import tensorflow as tf

print(tf.__version__)
print(tf.test.gpu_device_name())
print(tf.config.experimental.set_visible_devices)
print('GPU:', tf.config.list_physical_devices('GPU'))
print('CPU:', tf.config.list_physical_devices(device_type='CPU'))
print(tf.config.list_physical_devices('GPU'))
print(tf.test.is_gpu_available())
# 输出可用的GPU数量
print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))
# 查询GPU设备

报错信息

AttributeError: module 'tensorflow._api.v1.config' has no attribute 'list_physical_devices'

解决方案:原文链接

tf.config.experimental.list_physical_devices("GPU")
tensorflow1.15要在config后面加个.experimental.
tensorflow2.x不用加

将上面修改后可以得到下面这个图
在这里插入图片描述
上图解释:2输出的是tensorflow-gpu版本,5输出的上面测试代码的结果,如果5的结果显示GPU的数量不为0,那么4就不用管,3这里也可以不用管,我看到过的解释是tensorflow版本太老了,如果不想看到它,这里也给个处理链接

问题:上面这个图里面有可能1这个地方会显示找不到这个.dll文件
解决方案:原文链接DLL-files.com官网

1. 官网有 -> 直接复制缺失的.dll文件名字,然后去官网下载
2. 官网没有 -> 到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0下面找 ->改名字放到C:\Windows\System32下面

举例:如果缺少cudart64_100.dll,首先去官网找
在这里插入图片描述
然后下载解压后放到C:\Windows\System32中,如果不存在就到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0里面,然后搜索cudart64.dll,将名字改成cudart64_100.dll后放到C:\Windows\System32里面

问题:全部安装完成后,跑代码的时候控制面板显示GPU一直为0%
解决方案:我做了两部分操作,具体是一起在起作用还是单独起作用,实验下来方案1确实有点用,它可以针对某个程序或所有程序选择NVIDIA处理。我感觉好像代码上对GPU调用代码有问题,所以有方案2作为补充,具体方案1和方案2哪个效果大,暂时不知道!

方案1:首先打开"NVIDIA控制面板" -> "管理3D设置" -> "全局设置" -> "首选图形处理器"
											 "程序设置" -> "选择要自定义的程序"
	   然后点击"开始" -> "设置" -> "屏幕" -> "图形设置" -> "浏览(添加pycharm程序)" -> "选项" ->"高性能"

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
目前看来,结果上确实GPU在起作用,但我对进程进行检测时发现pycharm代码使用GPU效率并不高,大部分时间甚至没调用GPU,如下图
在这里插入图片描述
在这里插入图片描述
方案2:后续找了点资料,才知道自己的代码写的有问题,感觉并没有合理调用GPU资源,采用原文链接提供的方法3动态分配优化了下代码

# allow_soft_placement=True 没有GPU的话在CPU上运行
# log_device_placement=True 打印设备日志
config = tf.ConfigProto(allow_soft_placement=True, log_device_placement=True)
config.gpu_options.allow_growth = True   #  按需分配显存
with tf.Session(config=config) as sess:
    sess.run(...)

下面是运行结果的截图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从日志来看确实调用了GPU0,但是性能上好像并没有多少提升!仔细测试了下,和我测试的模型有关,不过总的来说,使用tensorflow-gpu在geforce 940mx上训练的目的达到了!

下面附带一张两种方案都采纳的RTX4090+tensorflow1.5跑的数据量比较大的效果图
在这里插入图片描述
果然还是我代码有问题,太酷啦!!!😭😭😭

附加:win11-RTX 4090-tensorflow1.x安装教程
如果你安装的环境不同,请参考原文链接,里面有其他版本的30/40系列安装文件,选择window平台跟着操作就行
提示:安装文件需要到github下载!!

win11安装的相关环境:

系统Windows 11 Pro for Workstations (23H2)
显卡NVIDIA Geforce RTX 4090
Tensorflow1.15.4+nv
Pycharm2022.1.4
Python3.8.20
AnacondaAnaconda3-2020.11_windows_x86_64
Cuda12.6
Cudnnv7.4.2

整个教程比较简单,首先是在anacoda里面创建一个容器,然后指定python的版本为3.8的即可,然后根据提供的github网站链接去下载对应的版本,最后使用命令行安装即可。
step1:我这边用图形化界面操作(实验室电脑截图,有点模糊,将就一下)
在这里插入图片描述
step2:进到github网址,然后下载下面这4个,最后解压安装即可(只解压0001就行)
在这里插入图片描述
step3:whl文件安装(我这边原文件已经删除了,这边给一个链接地址)

激活conda环境,在自己的虚拟环境下安装(我解压放的桌面,""部分的内容请自行替代,""是不需要的)
1.打开 Anaconda Prompt
2.输入 conda activate "wk_gpu"
3.安装 pip install "C:\Users\admin\Desktop"\tensorflow-1.15.4+nv-cp38-cp38-win_amd64.whl
4.查看 conda list
以上是我的电脑的路径,请注意修改!

问题:显示protoc >= 3.19.0,需要降低版本,如下图
在这里插入图片描述
解决方案:先卸载当前版本,再下载3.19.0版本的protoc即可

1.打开 Anaconda prompt
2.输入 conda activate tf1x
3.输入 conda list

在这里插入图片描述

1.输入 pip uninstall protobuf
2.输入 y -> 
3.输入 pip install protobuf==3.19.0

在这里插入图片描述
安装就结束了,可以跑代码了!祝好运😘

您可能感兴趣的与本文相关的镜像

PyTorch 2.7

PyTorch 2.7

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

<think>我们首先解决用户的问题:CRC多项式的推导过程以及常见CRC16、CRC32的多项式表示。 用户特别询问了CRC-8多项式:x⁸+x⁴+x³+x²+1 如何对应到0x1D,以及CRC16和CRC32的多项式及对应的值。 1. CRC多项式表示: 多项式通常有两种表示形式: - 代数形式:例如 $x^8 + x^4 + x^3 + x^2 + 1$ - 十六进制值(也称为简记式):例如0x1D 2. 推导过程(以CRC-8多项式为例): 多项式:$x^8 + x^4 + x^3 + x^2 + 1$ 注意:多项式各项的指数对应二进制数的位权,从最高位($x^8$)到最低位($x^0$)的系数组成一个二进制数。 由于是8次多项式,我们考虑9位二进制数(因为包括x^0项): x^8: 系数为1 x^7: 系数为0(未出现) x^6: 系数为0 x^5: 系数为0 x^4: 系数为1 x^3: 系数为1 x^2: 系数为1 x^1: 系数为0(未出现,注意原多项式没有x^1项) x^0: 系数为1 因此,二进制表示为:1 0001 1101(从x^8到x^0) 将其转换为十六进制: 0001 0001 -> 0x1? 不对,我们重新按8位(因为CRC-8是8位,但是多项式有9位,所以取低8位?)注意,通常多项式的最高位(x^8)是隐含的,所以我们只取后面的8位?不对,实际上,多项式的二进制表示包括最高位(即x^8)在内,所以总共9位,但通常我们用一个8位的值(即去掉最高位)来表示,但这里有一个常见误区。 3. 实际上,在CRC计算中,多项式通常用一个位宽等于CRC位数的值来表示,但注意多项式的最高次幂是隐含的(即总是1)。例如,对于8次多项式,我们用一个8位的数值来表示,它对应的是多项式中x^7到x^0的系数。但是,我们给出的多项式是$x^8+x^4+x^3+x^2+1$,那么: 我们可以这样写: x^8 + 0*x^7 + 0*x^6 + 0*x^5 + x^4 + x^3 + x^2 + 0*x^1 + x^0 去掉最高次幂x^8(因为它是隐含的,即我们知道最高次幂是8,所以只记录后面的系数),那么剩下的系数就是: 0 0 0 1 1 1 0 1 (从x^7到x^0) 这样,二进制为00011101,转换为十六进制就是0x1D。 但是,为什么最高次幂可以去掉?因为CRC计算中,多项式总是以固定位数(如8位)的寄存器来表示,而最高位(x^8)在移位操作中会自动被移出,我们关注的是除数多项式去掉最高位后的值(即0x1D)。 4. 另一种常见的表示方法:直接使用完整的多项式对应的二进制数(包括最高位1)来表示,那么9位二进制数100011101,转换为十六进制为0x11D(注意,9位二进制数需要3个十六进制数字,即0x11D)。因此,有时我们也会看到用0x11D来表示该多项式。 结论:0x1D和0x11D其实是同一个多项式,区别在于0x11D包含了最高位的1(即x^8),而0x1D是去掉最高位后的8位值。在代码实现中,我们通常使用0x1D(8位)作为异或的多项式值,因为计算时我们使用8位寄存器,最高位移出时用于判断是否要异或,而实际异或的是低8位(即0x1D)。 5. 对于其他CRC多项式: 1) CRC-16:常见的有多种标准,例如: - CRC-16-CCITT(多项式:$x^{16}+x^{12}+x^5+1$) 完整多项式:1 0001 0000 0010 0001 -> 二进制(17位)10001000000100001,十六进制0x11021。 去掉最高位,用16位表示:0001 0000 0010 0001 -> 0x1021- CRC-16-IBM(多项式:$x^{16}+x^{15}+x^2+1$) 完整多项式:1 1000 0000 0000 0101 -> 二进制(17位)11000000000000101,十六进制0x18005。 去掉最高位,用16位表示:1000000000000101 -> 0x8005。 2) CRC-32:以太网等广泛使用的标准,多项式为: $x^{32}+x^{26}+x^{23}+x^{22}+x^{16}+x^{12}+x^{11}+x^{10}+x^8+x^7+x^5+x^4+x^2+x+1$ 完整多项式:1 0000 0100 1100 0001 0001 1101 1011 0111 -> 32+1位,共33位,十六进制为0x104C11DB7。 去掉最高位,用32位表示:0000 0100 1100 0001 0001 1101 1011 0111 -> 0x04C11DB7。 注意:在代码实现中,我们通常使用去掉最高位后的值(即32位值0x04C11DB7)作为多项式。 总结: 多项式从代数形式转换为十六进制值: - 将多项式按降幂排列,写出各项的系数(包括0),形成一个二进制串(包括最高次幂的1)。 - 如果多项式是n次,则二进制串长度为n+1- 在代码中,我们通常使用这个二进制串去掉最高位(因为最高位总是1,在计算中隐含)后的n位二进制数,然后转换为十六进制。 因此: CRC-8 (x⁸+x⁴+x³+x²+1) -> 二进制串: [1]00011101 -> 去掉最高位1得到00011101 -> 0x1D CRC-16-CCITT (x&sup1;⁶+x&sup1;²+x⁵+1) -> 二进制串: [1]0001000000100001 -> 去掉最高位1得到0001000000100001 -> 0x1021 CRC-32 (标准多项式) -> 二进制串: [1]00000100110000010001110110110111 -> 去掉最高位1得到00000100110000010001110110110111 -> 0x04C11DB7 注意:不同的CRC标准可能使用不同的多项式,因此在实际应用中需要根据协议选择。 接下来,我们用CAPL代码示例展示如何计算CRC-8(使用0x1D多项式): </think> ### CAN通讯中CRC多项式值的推导与常用多项式详解 #### 1. CRC多项式值的推导原理 CRC多项式在计算机中通常用**十六进制值**表示,核心原理是将多项式代数形式转换为二进制位图: $$ \text{多项式 } G(x) = x^8 + x^4 + x^3 + x^2 + 1 \quad \Rightarrow \quad \text{十六进制值 } 0x1D $$ **推导过程**: 1. **列出多项式各项**: $x^8$ (最高次项)、$x^4$、$x^3$、$x^2$、$x^0$(常数项) 2. **构建二进制位图**: - 创建9位二进制数(从$x^8$到$x^0$) - 对应位设为1,其余位为0: ``` x^8 x^7 x^6 x^5 x^4 x^3 x^2 x^1 x^0 1 0 0 0 1 1 1 0 1 ``` 3. **转换为十六进制**: - 二进制 `100011101` 分段为 `0001 0001 1101` - 十六进制:`1` → 0x1, `0001` → 0x1, `1101` → 0xD - **最终值:0x11D(完整形式)或 0x1D(省略最高位)** (实践中常省略最高位的$x^8$,直接使用0x1D) > **关键点**:多项式中的$x^k$项对应二进制第$k$位为1,常数项$x^0$始终在最低位[^1]。 #### 2. 常用CRC多项式及对应值 以下为CAN通讯中三种核心CRC标准: | CRC类型 | 多项式代数形式 | 完整二进制 | 十六进制值 | 应用场景 | |---------|----------------|------------|------------|----------| | **CRC-8** | $x^8 + x^4 + x^3 + x^2 + 1$ | `100011101` | 0x1D (或0x11D) | CAN FD数据场、J1939 | | **CRC-16** | $x^{16} + x^{15} + x^2 + 1$ | `11000000000000101` | 0x8005 | CANopen、DeviceNet | | **CRC-32** | $x^{32} + x^{26} + x^{23} + x^{22} + x^{16} + x^{12} + x^{11} + x^{10} + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1$ | `100000100110000010001110110110111` | 0x04C11DB7 | 车载以太网、CAN FD帧校验 | **特殊说明**: 1. **CRC-16-CCITT变种**: 多项式 $x^{16} + x^{12} + x^5 + 1$ → 二进制 `10001000000100001` → **0x1021**(用于ISO 15765-2) 2. **初始值与输出异或**: - CRC-8: 初始值0xFF, 输出异或0xFF - CRC-32: 初始值0xFFFFFFFF, 输出异或0xFFFFFFFF #### 3. CAPL中的多项式应用示例 **CRC-8实现(多项式0x1D)**: ```c dword CalculateCRC8(byte data[], dword len) { dword crc = 0xFF; // 初始值 dword poly = 0x1D; // 多项式值 for(dword i=0; i<len; i++) { crc ^= data[i]; // 数据异或 for(byte bit=0; bit<8; bit++) { if(crc & 0x80) crc = (crc << 1) ^ poly; // 多项式除法 else crc <<= 1; } crc &= 0xFF; // 截断为8位 } return crc ^ 0xFF; // 最终异或 } ``` **CRC-32实现(多项式0x04C11DB7)**: ```c dword CalculateCRC32(byte data[], dword len) { dword crc = 0xFFFFFFFF; // 初始值 dword poly = 0x04C11DB7; // 多项式值 for(dword i=0; i<len; i++) { crc ^= (dword)data[i] << 24; // 移入高位 for(byte bit=0; bit<8; bit++) { if(crc & 0x80000000) crc = (crc << 1) ^ poly; // 32位处理 else crc <<= 1; } } return crc ^ 0xFFFFFFFF; // 最终异或 } ``` #### 4. 多项式选择原则 1. **错误检测能力**: - 奇数项多项式可检测所有单比特错误 - 含$x+1$因子的多项式可检测所有奇数个错误 2. **协议兼容性**: CAN FD必须使用CRC-17或CRC-21,传统CAN常用CRC-15 3. **计算效率**: 较低阶多项式(如CRC-8)适合实时性要求高的场景 > 实际开发中需严格遵循协议规范,如AUTOSAR要求CRC-32使用多项式0x04C11DB7[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值