mxnet(动手学深度学习) Ubuntu安装及注意事项(CPU/GPU)

深度学习 专栏收录该内容
9 篇文章 0 订阅

上一节内容,我已经分享了一些资料,感兴趣的可以点击这个
1. 这篇文章的主要内容是:安装过程中出现的问题及解决方案
2. 接下来第一部分,第二部分是CPU,第三部分是GPU,我相信一部分人都是先以CPU配置,熟悉一段时间换成GPU,有个渐进的过程,相对而言,有了CPU的配置基础GPU配置会很容易,同时第一部分,第二部分涉及GPU的地方会埋下伏笔,兼顾只考虑GPU的同事。

1 快速下载Anaconda3/Miniconda

高效是我们最喜欢的,下载太慢很头疼。为此,我给大家推荐清华镜像源,速度-你网速有多快下载就有多快,给大家一个思路,想要下载什么软件可以先到清华镜像源上搜索下,没有的话再到官网下载。
清华镜像源:
https://mirrors.tuna.tsinghua.edu.cn
在这里插入图片描述
选择一个合适的版本,右键复制链接,用wget即可

wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2019.10-Linux-x86_64.sh

注意:

  1. 推荐用Anaconda而不是Miniconda,因为假如瘦conda没有相应的软件,会在线下载,有些麻烦啊。
  2. 安装到最后一定要选yes,将conda加入环境变量中。更新环境变量直接输入bash即可

1.1 配置PyPI镜像

国内用户可以,用如下命令加速下载

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
取消可以使用
pip config unset global.index-url

1.2 ERROR: unknown command “config”

原因:pip版本太低,必须升级到10.0.0版本以上,安装Anaconda2很可能出现这个问题,建议使用Anaconda3。
解决方法:使用下面的升级命令,反复到最新版

conda update pip

1.3 conda env create -f environment.yml (CPU/GPU)?

CPU/GPU最大的区别应该是这个命令,这一步决定了你将使用CPU还是GPU,是重要的一步。
对于CPU配置:直接跳过,看1.4即可
对于GPU配置: 可以看第三部分,因为前面两部分是CPU配置,这里加进来GPU会使CPU读者抓不住重点!!!
对于第一次CPU配置接着想用GPU了,不用担心工作会白做了,在第三部分中会谈到一些细节。

1.4 CondaValueError: prefix already exists: xxx

原因:多次使用命令conda env create -f environment.yml。这个东西蛮有意思的,等会还要提到,特别注意后面提及的文件路径
解决方法:到提示的文件路径下,将gluon文件夹删除,重新执行conda env create -f environment.yml
注意:
这个命令需要等一段时间,因为它要下载一些文件,不要中途终止它。environment.yml文件已经指出了。
在这里插入图片描述

1.5 后台运行Jupter notebook

注意:你应该提前安装notedown插件

pip install https://github.com/mli/notedown/tarball/master

每次开启新的终端都要执行下面两句命令,不然会报错

conda activate gluon 					# 若conda版本低于4.4,使用命令activate gluon
# 启动jupyter notebook
jupyter notebook --NotebookApp.contents_manager_class='notedown.NotedownContentsManager' &

注意:最好使用后台执行,即&关于前后台的使用,请看这儿
https://blog.csdn.net/weixin_39956356/article/details/78168501
还有一个方便的理由是:即使你不小心关闭了浏览器,这时终端会出现相关提示,直接重新打开浏览器进入即可。

1.5.1 我的jupyter notebook启动失败?

这是因为没有执行conda activate gluon

1.5.2 我的jupyter notebook没有执行,只能阅读?

这是因为没有加--NotebookApp.contents_manager_class='notedown.NotedownContentsManager',记得加上。
为了简便,直接配置jupyter notebook文件。

# 一次性配置,以后直接输入jupyter notebook即可。
jupyter notebook --generate-config		# 根据提示生成的文件路径,打开,末尾加上下面代码
c.NotebookApp.contents_manager_class = 'notedown.NotedownContentsManager'

1.5.3 为了更方便的使用,我弄了一个脚本

注意:上一步配置是必要的

#! /bin/sh

conda activate gluon 	# 若conda版本低于4.4,使用命令activate gluon
jupyter notebook &

这里的执行蛮有意思的,将脚本保存成xxx.sh,执行命令. xxx.sh,注意中间要有一个空格。脚本执行完成后所有的环境信息会被全部删除,就像函数调用,为了使得子脚本的环境作用于父bash,必须使用这种特殊的语法。

2 PyCharm的工程建立

虽然jupyter notebook中的cel可以执行python命令,但是有一个IDE总会方便些。下面我分享下遇到的一些问题。

2.1 多个python环境对后续的操作到底有没有影响?

针对Ubuntu而言,我想影响并不大,很多人环境里有python2、python3、Anaconda2、Anaconda3。其中Anaconda自带python,其实不用太担心是不是要卸载保留一个,程序运行时候只关心设置的哪个能不能找到,其他的都是空气。假如同时安装了Anaconda2、Anaconda3,保险的做法是将一个版本的配置信息在.bashrc注释掉
到底哪个能用,还是看PyCharm配置的哪个

2.2 PyCharm配置mxnet(gluon)

还记得上面的过程中有一步要执行很久,没错就是1.3。这一步到底在干嘛?简单地讲,给用户配置好mxnet环境,换句话说,你只要用这个环境,所有需要的包都可以导入了。环境ok啦
怎么一步搞定,因为我发现一些人使用的时候总在换解释器,总觉得解释器不对,换一次更新又要等很久。

2.3 mxnet解释器路径在哪?

首先,我们安装了Anaconda3,当然路径在Anaconda3下面啊。有一个envs文件夹里面有gloun文件夹,就是这个啦,大概有500M,这就解释了1.3中为什么等这么久了。
在这里插入图片描述
里面有所有的信息啊,你可以想想为什么要conda activate gluon
这里分享个简单不会出错的方式,在激活的终端中启动Pycharm,如下图,务必要这样,不然启动后Pycharm识别的Conda是普通的,而不是gloun的环境。
在这里插入图片描述
启动PyCharm,新建工程,按照下面的设置
正如上面的分析,点击后选择conda,会自动识别到gloun。
在这里插入图片描述

2.4 PyCharm中matplot画不了图?

先检查下是不是已经出现小窗口了?
画图前一定要加上plt.show();
这里有个案例,也可以参考下:
https://blog.csdn.net/weixin_39956356/article/details/106330373

3 GPU配置请看这儿,建议先看上面

3.1 Nvidia显卡,CUDA,CUDNN?

这里有必要解释三个名词的含义,不要糊里糊涂的乱用命令啊。
Nvidia显卡: 你买的GPU需要驱动吧,没有驱动电脑是不认识的,当然驱动是官方提供的,任何设备都需要驱动,没有驱动不工作。
CUDA:是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。也就是说CUDA是NVIDIA推出的并行架构,只有买它的产品才能获得这种"售后"。深度学习中,也叫做N卡,称之为GPU。不是它的产品被叫做CPU版本,当然并行架构又不是只有CUDA,还有OpenBlas(免费),intel(KML 收费),换句话说,没有买N卡的电脑也可以并行加速,这里讲N卡。注意: 只有驱动装好了,才能装CUDA啊。
CUDNN:在CUDA基础上,进一步实现深度神经网络GPU加速,NVIDIA推出了CUDNN,它强调性能、易用性和低内存开销。Tensorflow、caffe, mxnet等都支持。这里就不讲了,感兴趣的可以百度下。注意: 只有装好了CUDA,才可以弄CUDNN。

3.1.1 根据显卡型号安装合适Nvidia驱动

不要觉得这步多余,安装好显卡驱动请跳过。
**对于新电脑刚装好的Ubuntu系统,进入系统是使用的集成显卡,此时没有使用GPU。**为此,需要在官网上下载linux版驱动。注意:要仔细一把成功,否则开机是黑屏,因为显卡驱动都没转好,显示器就很尴尬了
如果以前安装过的,需要升级的话,需要先卸载!
N卡官方地址:
https://www.nvidia.cn/Download/index.aspx?lang=cn
在这里插入图片描述这里有一篇文章,可以参考下
https://blog.csdn.net/nnUyi/article/details/78067544

下面直接通过命令查询,合适的驱动版本

ubuntu-drivers devices 

在这里插入图片描述
成功后,可以用nvidia-smi查看,没输出就要找问题了。
在这里插入图片描述

3.1.2 选择合适的CUDA版本

虽然说CUDA只是一个并行库,并不是所有的版本都可装的,官方有一个推荐版本,请按照规则来。

在这里插入图片描述CUDA各版本下载地址
https://developer.nvidia.com/cuda-toolkit-archive
在这里插入图片描述

# run文件简单些,其他的都可以,就是不要下载远吗自己编译。。。。
wget 链接
sudo sh xxx # 如果你在root下安装的,非root用户也可以用,影响不大。建议默认安装,不要改安装路径

3.1.3 将CUDA加入系统库路径下

这一步很重要,你装了再多的软件,不告诉系统等于0.

cd 				# 到用户根目录下,和~是一样的
vim .bashrc		# 打开并转到末尾,添加一行代码
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda-9.0(版本不同这里不一样!)/lib64
source .bashrc	

3.2 安装GPU的MXNet

这里假定你已经了解了第一部分和第二部分了。

3.2.1 选择合适的(MXNet)GPU

安装软件前,先到仓库里看看mxnet有什么版本啊,不要乱装,一次还是很费时的,一次搞定啊

pip search mxnet

在这里插入图片描述

3.2.2 修改environment.yml

vim environment.yml 

在这里插入图片描述
如果之前我安装过CPU版本,请把之前的gluon复制出来,万一以后要用呢?省的重复操作。再把gluon文件夹删除,这是最好的一步成功的办法。
还有需要注意的是: 在激活的环境中卸载CPU的mxnet,pip uninstall mxnet.再退出激活环境(直接一个bash即可)。
在这里插入图片描述
执行conda env create -f environment.yml,还是要等很久。

3.2.3 很不幸,需要重新装jupyter notebook见上

测试代码

import mxnet as mx
from mxnet import nd

# 简单的展示gpu配置成功
print(mx.cpu(), mx.gpu());

# NDArray在CPU上运算
x_cpu = nd.array([1, 2, 3]);
print(x_cpu);                   # NDArray默认在CPU上 也就是物理内存上分配
print(x_cpu.context);           # 通过context来查看NDArray所在的设备


# NDArray在GPU上运算
x_gpu = nd.array([1, 2, 3], ctx=mx.gpu());
print(x_gpu);                   # NDArray默认在CPU上 也就是物理内存上分配
print(x_gpu.context);           # 通过context来查看NDArray所在的设备

在这里插入图片描述

3.4 Pycharm导入CUDA

通过上述的步骤,已经可以在终端或jupyter notebook都可以使用了,再使用上面的脚本就很方便了,不过就是每个终端都需要激活环境conda activate gluon
第一部分,第二部分是CPU很重要,不然你会遇到很多问题。。。。

3.4.1 libcudart.so.xxx: cannot open shared object file: No such file or directory

很明显的动态库问题,有两个主要的原因:

  1. CUDA根本没装好,这个你需要仔细重复上面的过程
  2. CUDA装好了,只是Pycharm还不知道CUDA的位置,这个简单。

动态库的问题在程序链接的时候才会出现,主要是某某软件找不到指定的动态库而已。那么怎么告诉Pycharm CUDA的位置?
需要的动态库在哪? libcudart.so.xxx在哪?不知道的话,可以全局查找,不过这里直接给出位置/usr/local/cuda-10.0/lib64

sudo ldconfig /usr/local/cuda-10.0/lib64

不过ldconfig不是这么用的,有些不专业。感兴趣的可以去看看/etc下面ld.so.conf和ld.so.conf.d文件下的内容。熟悉PKG管理的,对动态应该很熟悉,比如常见的OPENCV,HDF5。

3.4.3 可以用上面的测试案例试试Pycharm,有问题请留言。

在这里插入图片描述
最后验证下,我们的GPU是不是已经被Pycharm使用了
nvidia-smi查看谁用了GPU,得到PID,去虚拟文件系统去找即可。
在这里插入图片描述

  • 2
    点赞
  • 0
    评论
  • 5
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

1 引言 1 1.1 深度学习简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 如何使用本书 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2 预备知识 9 2.1 安装和运行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.2 数据操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.3 自动求梯度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.4 查阅 MXNet 文档 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3 深度学习基础 31 3.1 线性回归 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.2 线性回归的从零开始实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.3 线性回归的 Gluon 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 3.4 Softmax 回归 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.5 Softmax 回归的从零开始实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 3.6 Softmax 回归的 Gluon 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 3.7 多层感知机 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 3.8 多层感知机的从零开始实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 3.9 多层感知机的 Gluon 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 i3.10 欠拟合、过拟合和模型选择 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 3.11 权重衰减 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 3.12 权重衰减的 Gluon 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 3.13 丢弃法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 3.14 丢弃法的 Gluon 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 3.15 正向传播和反向传播 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 3.16 实战 Kaggle 比赛:房价预测 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 4 深度学习计算 113 4.1 模型构造 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 4.2 模型参数的访问、初始化和共享 . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 4.3 模型参数的延后初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 4.4 自定义层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 4.5 读取和存储 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 4.6 GPU 计算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 5 卷积神经网络 137 5.1 二维卷积层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 5.2 填充和步幅 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 5.3 多输入和输出通道 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 5.4 池化层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 5.5 卷积神经网络(LeNet) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 5.6 深度卷积神经网络(AlexNet) . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 5.7 使用重复元素的网络(VGG) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 5.8 网络中的网络(NiN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 5.9 含并行连结的网络(GoogLeNet) . . . . . . . . . . . . . . . . . . . . . . . . . . 171 5.10 批量归一化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 5.11 批量归一化的 Gluon 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 5.12 残差网络(ResNet) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 5.13 稠密连接网络(DenseNet) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 6 循环神经网络 ii 193 6.1 语言模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 6.2 隐藏状态 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 6.3 循环神经网络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1996.4 通过时间反向传播 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 6.5 ⻔控循环单元(GRU) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 6.6 ⻓短期记忆(LSTM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 6.7 深度循环神经网络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 6.8 双向循环神经网络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 6.9 循环神经网络的 Gluon 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 7 优化算法 247 7.1 优化算法概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 7.2 梯度下降和随机梯度下降 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 7.3 梯度下降和随机梯度下降的 Gluon 实现 . . . . . . . . . . . . . . . . . . . . . . . 263 7.4 动量法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 7.5 动量法的 Gluon 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 7.6 Adagrad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 7.7 Adagrad 的 Gluon 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 7.8 RMSProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 7.9 RMSProp 的 Gluon 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 7.10 Adadelta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 7.11 Adadelta 的 Gluon 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 7.12 Adam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 7.13 Adam 的 Gluon 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 8 计算性能 305 8.1 命令式和符号式混合编程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 8.2 异步计算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 8.3 自动并行计算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 8.4 多 GPU 计算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 8.5 多 GPU 计算的 Gluon 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 9 计算机视觉 335 9.1 图片增广 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 9.2 微调 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 9.3 物体检测和边界框 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 9.4 锚框 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 9.5 物体检测数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 iii9.6 单发多框检测(SSD) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364 9.7 区域卷积神经网络(R-CNN)系列 . . . . . . . . . . . . . . . . . . . . . . . . . . 376 9.8 语义分割和数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 9.9 全卷积网络(FCN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 9.10 样式迁移 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396 9.11 实战 Kaggle 比赛:图像分类(CIFAR-10) . . . . . . . . . . . . . . . . . . . . . 406 9.12 实战 Kaggle 比赛:狗的品种识别 (ImageNet Dogs) . . . . . . . . . . . . . . . . . 416 10 自然语言处理 427 10.1 词嵌入:word2vec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427 10.2 词嵌入:GloVe 和 fastText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 10.3 求近似词和类比词 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 10.4 文本分类:情感分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 10.5 编码器—解码器(seq2seq) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 10.6 束搜索 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456 10.7 注意力机制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459 10.8 机器翻译 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 11 附录 473 11.1 主要符号一览 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 11.2 数基础 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475 11.3 使用 Jupyter Notebook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482 11.4 使用 AWS 运行代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488 11.5 GPU 购买指南 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499 11.6 gluonbook 包索引 .
©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值