进入网址之后会点击clone or download
,再点击download ZIP
,下载得到一个压缩包,然后解压得到文件夹Hyperspectral-Classification-master
。
打开PyCharm,在PyCharm的项目路径PycharmProjects单独新建了一个project,选择的是已有的环境。
然后将下载解压后的文件夹Hyperspectral-Classification-master
内的所有文件移动到location
的路径中,我这里是C:\Users\73416\PycharmProjects\HSIproject
。
项目对于几个第三方函数库的版本有要求,存放于一个.txt
文件requirements.txt
中。
之后在PyCharm中打开main.py
,PyCharm会自动提醒你不满足requirements.txt
的要求的函数库有哪几个。
由上图可知,我有几个函数库并未安装:
spectral
:版本==0.19visdom
:版本>=0.1.5torchsummary
:版本>=1.5此外PyCharm会询问你是不是通过conda
来安装这些包(install requirements
),这种方法和在命令行窗口输入命令是一样的。
但是在三个函数库,通过conda
安装是失败的。
报错的原因是PackagesNotFoundError: The following packages are not available from current channels:
,其实就是conda
没有可行的下载路径。
简单来说,就是通过conda
是无法直接下载这三个函数库的。
之后我转而通过pip来下载这三个函数库,是可以下载成功的。
但是在应用Anaconda环境的PyCharm中,或者在Anaconda prompt中输入conda list
,都找不到下载好的torchsummary
函数库。
直接通过pip下载的函数库,在Anaconda中不能使用的原因是:
在你下载anaconda之前,系统就有一个pip,通过这个pip下载的函数库会储存到它相应的路径,我们称为路径1。
在下载Anaconda之后,通过conda下载的函数库会储存到conda的环境下,我们称为路径2。
下载Anaconda之前系统只存在路径1,所以通过pip下载的函数库,肯定不会存储在Anaconda的路径2。
这也就是为什么pip下载的函数库,在无法被使用conda环境的PyCharm使用。
但是,Anaconda里也有内置的pip,通过这个pip可以把函数库下载到conda的环境。也就是说,在下载了Anaconda之后,系统里就有两个pip。
但是系统默认的pip是Python的pip,我们平时使用的是conda环境的IDE PyCharm,但是默认的pip下载的函数库不能被PyCharm使用。
我找到的解决方法有三种:
本博客使用的是第三种方法:直接使用Anaconda的pip下载函数库。
首先要找到Anaconda的Scripts文件夹的路径,我的路径是E:\Anaconda\Scripts
,这个取决于Anaconda的安装路径。
之后打开命令行,输入cd 文件路径
,我这里是cd E:\Anaconda\Scripts
。
再输入文件所在的磁盘,我这里是E:
,得到下面这个界面。
之后再输入pip的安装命令,pip install 函数库名
,安装成功得到下面的界面。
要检验所下载的函数库是不是位于conda的环境下。先打开Anaconda prompt。
然后输入conda list
,查看conda环境下的函数库。
可以看到conda的环境下已经有了torchsummary这个函数库。
另外从PyCharm也可以看到。
做完这些之后,再看main.py
就不存在缺少函数库的报错了。
之后按照GitHub的步骤,使用visdom。
首先打开命令行窗口,然后输入python -m visdom.server
。
然后访问网址http://localhost:8097
。得到这个界面。
main.py
文件No module named 'torch'
的报错然后在命令行窗口输入代码运行main.py文件,python 文件路径\main.py --model nn --dataset PaviaU --training_sample 0.1 --cuda 0
。我这里是python C:\Users\73416\PycharmProjects\HSIproject\main.py --model nn --dataset PaviaU --training_sample 0.1 --cuda 0
。
但是出现了报错:No module named 'torch'
。
但是我已经使用Anaconda的pip安装了呀,检验一下。打开命令行,使用Anaconda的pip安装torch
。
然后告诉我:requirement already satisfied
。说明这个函数库已经被安装了。
直觉告诉我这又是路径的问题,百度和CSDN查阅一波确实是路径的问题。要通过代码把根目录rootpath
加入到搜索路径sys.path
下。
import sys,os
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
sys.path.append(rootPath)
然后再在命令行输入python C:\Users\73416\PycharmProjects\HSIproject\main.py --model nn --dataset PaviaU --training_sample 0.1 --cuda 0
来运行main.py
文件。
结果发现还是不行,一样是No module named 'torch'
。
然后我明白了,上面这行代码是解决项目内其他模块无法被调用的问题,通过将整个项目文件的路径加入到搜索路径来解决。而显然torch
并不应该在项目文件的路径。所以这个问题依旧存在。(其实就算torch
可以被正常调用,当main.py
函数调用项目文件的其他模块(自己定义的函数)的时候,也会出现No module named XXX
的错误,这里只是提前解决了这个问题)。
这时我决定直接查看torch
的路径,然后将这个路径加入搜索路径。
在PyCharm界面输入代码torch
,会返回torch
所在的位置。
可以看到我这里torch
的路径是E:\\Anaconda\\lib\\site-packages\\
,然后在之前的增加修改路径的代码中加入sys.path.append('E:\\Anaconda\\lib\\site-packages\\')
。
这部分最终的代码如下:
import sys,os
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
sys.path.append(rootPath)
sys.path.append('E:\\Anaconda\\lib\\site-packages\\')
需要注意的是,这段代码添加的位置是main.py
的开头(import XXX
的前面),但是由于import _future_
需要放在最开头的位置,所以这段代码插入的位置是import _future_
之后,import XXX
之前。
至此,再在命令行用python C:\Users\73416\PycharmProjects\HSIproject\main.py --model nn --dataset PaviaU --training_sample 0.1 --cuda 0
运行main.py
,不再出现No module named 'torch'
的错误。
main.py
之前要先打开visdom但是出现了另一个报错信息ConnectionRefusedError
。
可以看到错误类型是ConnectionRefusedError
,目标计算机积极拒绝,无法连接
。我猜测是visdom的原因,因为我们需要http://localhost:8097
去响应我们的操作。
然后发现自己在运行main.py
的时候,并没有使用python -m visdom.server
。
于是我关掉了所有命令行,先打开一个命令行输入python -m visdom.server
。
然后再打开一个命令行,输入python C:\Users\73416\PycharmProjects\HSIproject\main.py --model nn --dataset PaviaU --training_sample 0.1 --cuda 0
运行main.py
,不再出现ConnectionRefusedError
的错误。输入python -m visdom.server
的命令行也发生变化。
但是又出现了另一个错误:FileNotFoundError
查看响应的代码,发现是在创建数据集文件夹的时候,找不到路径。FileNotFoundError
,系统找不到指定的路径。:'./Datasets/Paviau/'
我的第一个想法是,既然系统找不到'./Datasets/Paviau/'
的路径,那我就参照GitHub的文件夹示例创建这个路径。于是我创建了如下的文件夹。
然后再次在命令行运行main.py
,结果依旧找不到路径。
这时我意识到是路径的问题(没错又是路径的问题!)。
这时我首先怀疑的是,是不是我的文件夹创建的方式不对,导致系统找不到相应的路径。
为了验证这个问题,我在C盘手动查找./Datasets/Paviau/
这个路径,发现是可以找到的(当时只有Paviau
这个文件夹,其他两个.mat
文件是程序运行的时候下载的数据集,当时并没有它俩)。
接下来,我就怀疑是程序指定的搜索路径的问题。
默认的搜索路径是./
,也就是不论前缀。
这时候我突然想起来,当我手动查找./Datasets/Paviau/
这个路径时,直接在C盘查找会耗费特别特别长的时间,直到我最后手动停止也没有找到。后来我指定了在项目文件夹下面找,才在短时间内找到了(用了几秒)。
而程序从运行到报错的时间,小于系统在C盘查找的时间需要的时间。换句话说,系统是直接在整个系统盘找这个路径,找了一段时间没找到,返回了FileNotFoundError
的错误,但是如果时间足够长的话是可以找得到的(我认为这其实是程序的保护机制)。
所以我在程序中强制修改了查找路径,从默认的./
改到我创建Datasets
文件夹的项目路径C:\\Users\\73416\\PycharmProjects\\HSIproject\\Datasets\\
(修改target_folder
)。
然后把Datasets
下的子文件夹全部删除(下载数据集的时候会自行创建),然后再命令行输入python C:\Users\73416\PycharmProjects\HSIproject\main.py --model nn --dataset PaviaU --training_sample 0.1 --cuda 0
来运行main.py
。
成功!
第二天我再运行的时候,跑到一半又出现了一个报错:
我当时真的是百思不得其解,完全不知道这是什么意思,网上也查不到。
直到我点开了computer,发现我的C盘一点空间的不剩了(剩余0字节)。
这时候我怀疑是不是我C盘空间不够的问题。
于是我清理了C盘,腾出足够的空间:
然后再次运行main.py
。然后这次成功了。
之后回去再看C盘的空间,发现少了1个G左右:
然后我开始找C盘新增的比较大的文件。
我原以为是数据集重新下载了,结果发现项目文件的大小远远小于1G,所以并不是这里问题。
之后找呀找(找呀找呀找朋友),结果发现了hiberfil.sys
有3.14G,最后额修改时间恰好是我运行main.py
的时间(我天真的以为成了),看后缀是个系统文件。
百度之后发现hiberfil.sys
是系统休眠的缓存文件,如果要删除的话,以管理员身份运行cmd,输入powercfg -h off
来关闭这个功能。
发现C盘空间回复了:
然后我满怀信心地再次运行main.py
,结果发现C盘又少了1个G!没错又少了1个G!!!!这时候再看C盘,已经没有powercfg -h off
。
之后我又开始了无比漫长的寻找,想弄清这1G跑到什么地方去了。
减少的内存是保存的网络参数。
由于命名规则的原因,在参数文件的名称中会带有accuracy。导致每次运行得到的参数文件不会被替换。所以每次运行C盘空间都会减少。
我的参数保存的路径是:
C:\Users\73416\checkpoints
参数文件名称如下:
想要释放空间,删掉不用的参数文件就好了。
进入网址之后会点击clone or download
,再点击download ZIP
,下载得到一个压缩包,然后解压得到文件夹Hyperspectral-Classification-master
。
打开PyCharm,在PyCharm的项目路径PycharmProjects单独新建了一个project,选择的是已有的环境。
然后将下载解压后的文件夹Hyperspectral-Classification-master
内的所有文件移动到location
的路径中,我这里是C:\Users\73416\PycharmProjects\HSIproject
。
项目对于几个第三方函数库的版本有要求,存放于一个.txt
文件requirements.txt
中。
之后在PyCharm中打开main.py
,PyCharm会自动提醒你不满足requirements.txt
的要求的函数库有哪几个。
下面使用Anaconda内置的pip来下载满足条件的函数库:
首先要找到Anaconda的Scripts文件夹的路径,我的路径是E:\Anaconda\Scripts
,这个取决于Anaconda的安装路径。
之后打开命令行,输入cd 文件路径
,我这里是cd E:\Anaconda\Scripts
。
再输入文件所在的磁盘,我这里是E:
,得到下面这个界面。
之后再输入pip的安装命令,pip install 函数库名
,安装成功得到下面的界面。
要检验所下载的函数库是不是位于conda的环境下。先打开Anaconda prompt。
然后输入conda list
,查看conda环境下的函数库。
可以看到conda的环境下已经有了torchsummary这个函数库。
另外从PyCharm也可以看到。
做完这些之后,再看main.py
就不存在缺少函数库的报错了。
之后按照GitHub的步骤,使用visdom。
首先打开命令行窗口,然后输入python -m visdom.server
。
然后访问网址http://localhost:8097
。得到这个界面。
main.py
文件No module named 'torch'
的报错首先查看torch
的路径。
在PyCharm界面输入代码torch
,会返回torch
所在的位置。
可以看到我这里torch
的路径是E:\\Anaconda\\lib\\site-packages\\
,然后main.py
的import _future_
之后,import XXX
之前插入如下的代码:
import sys,os
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
sys.path.append(rootPath)
sys.path.append('E:\\Anaconda\\lib\\site-packages\\')
(最后一行sys.path.append('E:\\Anaconda\\lib\\site-packages\\')
的路径是torch
的路径,因人而异!!):
main.py
之前要先在命令行打开visdom如题。
在项目文件夹下(我这里是C:\\Users\\73416\\PycharmProjects\\HSIproject\\
)创建一个空的文件夹,命名为Datasets
。
然后再PyCharm中打开datasets.py
,修改其中的代码。
再下图所示的位置,加入我选中的那一行的代码target_folder = "C:\\Users\\73416\\PycharmProjects\\HSIproject\\Datasets\\"
,用来修改默认的搜索路径。
(注意:路径是文件夹Datasets
的子文件夹的路径,因人而异!! 即使现在文件夹Datasets
并没有子文件)。
首先打开命令行窗口,然后输入python -m visdom.server
。
然后访问网址http://localhost:8097
。得到这个界面。
然后确保C盘有足够的空间!!!
然后打开命令行,输入python C:\Users\73416\PycharmProjects\HSIproject\main.py --model nn --dataset PaviaU --training_sample 0.1 --cuda 0
,运行main.py
,并指明相应的参数。
然后等待结果就可以了。