小编Pro*_*mer的帖子

PyTorch 1.7 的 cuda 9.2、10.1、10.2、11.0 版本之间的差异

最近,我需要安装pytorch,当我查看网站时:

安装pytorch网站

它显示了四个不同的版本9.2,10.1,10.2,11.0可供选择,而且我的电脑上安装了cuda版本10.0和驱动版本450,我以为使用pytorch时会无法启用gpu,之后我选择10.1并尝试了torch.cuda.is_available()一下回报True

我有两个问题:

  1. 为什么即使我的 cuda 版本与我提到的版本不同,一切都正常?

  2. 选择 cuda 版本 9.2,10.1,10.2,11.0 有什么区别?

pytorch

13
推荐指数
1
解决办法
1万
查看次数

使用“with tf.Session()”的目的?

我正在练习名为 concatenate 的 keras 方法。

在这个例子中使用 with 语句让我想到了这个语句的目的

示例代码如下所示:

import numpy as np 
import keras.backend as K
import tensorflow as tf

t1 = K.variable(np.array([ [[1, 2], [2, 3]], [[4, 4], [5, 3]]]))
t2 = K.variable(np.array([[[7, 4], [8, 4]], [[2, 10], [15, 11]]]))

d0 = K.concatenate([t1 , t2] , axis=-2)

init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    print(sess.run(d0))
Run Code Online (Sandbox Code Playgroud)

然后我检查文档:tensorflow 并说:

会话可能拥有资源,例如 tf.Variable、tf.QueueBase 和 tf.ReaderBase。当不再需要这些资源时,释放这些资源很重要。为此,请在会话上调用 tf.Session.close 方法,或将会话用作上下文管理器。

我相信这已经解释了所有这些,但有人可以给我更直观的解释。

提前致谢,祝您有美好的一天!

python with-statement tensorflow

10
推荐指数
2
解决办法
2万
查看次数

CMAKE_PREFIX_PATH 和 CMAKE_MODULE_PATH 均为空,find_package 仍然有效

我是 cmake 的新手,目前正在学习find_package()

来自文档:find_package

在模块模式下,CMake 搜索名为 Find.cmake 的文件。首先在 CMAKE_MODULE_PATH 中搜索该文件,然后在 CMake 安装提供的“查找模块”中搜索。如果找到该文件,则由 CMake 读取并处理该文件。它负责查找包、检查版本并生成任何所需的消息。一些查找模块对版本控制提供有限的支持或不提供支持;检查模块文档。

例如,如果我find_package(OpenCV)使用以下命令键入并运行 cmake_find_debug_mode:

cmake -DCMAKE_FIND_DEBUG_MODE=ON .
Run Code Online (Sandbox Code Playgroud)

而且,屏幕上打印的信息确实显示它首先尝试搜索{Path where I install cmake}/Modules/FindOpenCV.cmake我认为但不确定CMAKE_MODULE_PATH但没有找到的内容,然后它继续搜索并最终从我在一个脚本中定义的OpenCVConfig.cmake环境变量中找到。 OpenCV_DIR

在我打印出消息之前,一切都会如我所料

message(STATUS "CMAKE_PREFIX_PATH : ${CMAKE_PREFIX_PATH}")
message(STATUS "CMAKE_MODULE_PATH : ${CMAKE_MODULE_PATH}")
Run Code Online (Sandbox Code Playgroud)

其中doc中的第一个定义为“FIND_XXX() 用于搜索的路径,并添加了适当的后缀”。

他们俩都没有返回任何内容......

我有两个问题:

(1)为什么find_package偶数${CMAKE_MODULE_PATH}是空的?(2) 如何查看cmake定义的所有这些环境变量,例如CMAKE_MODULE_PATH?

谢谢!!

cmake

6
推荐指数
1
解决办法
5135
查看次数

原因导致python包的位置不同

我是 Linux 系统的新手,没有操作系统的背景。

我在导入 numpy 时遇到了一些问题,但我解决了。

但是心里还是有些疑问。

我知道我可以使用以下代码来知道 Python 在哪里找到包

import sys
sys.path()
Run Code Online (Sandbox Code Playgroud)

在我的情况下,它提供了几种选择:

/home/twotwo/.local/lib/python3.6/site-packages
/usr/local/lib/python3.6/dist-packages
/usr/lib/python3/dist-packages
Run Code Online (Sandbox Code Playgroud)

我想知道第一和第二之间的区别

一个,还有第二个和第三个。

我想第一个和第二个差异是由我下载它的方式引起的,如下面所述,如果不是,请纠正我。

我们建议使用用户安装,使用 --user 标志来 pip (注意:不要使用 sudo pip,这可能会导致问题)。这将为您的本地用户安装软件包,并且不会写入系统目录。

第二个和第三个都/user在一开始

但是它们之间仍然存在一个有local和另一个没有的区别。

总结我的问题:

(1)两者的区别:

/home/twotwo/.local/lib/python3.6/site-packages 
Run Code Online (Sandbox Code Playgroud)

/usr/local/lib/python3.6/dist-packages

(2)两者的区别:

/usr/local/lib/python3.6/dist-packages

/usr/lib/python3/dist-packages
Run Code Online (Sandbox Code Playgroud)

(3) 实际上,两条路径都有numpy,但是python如何选择要导入的路径?

非常感谢大家,祝你有美好的一天!

numpy path python-import python-3.x

3
推荐指数
1
解决办法
5158
查看次数

终止调用递归 C++ 多线程

我是线程的新手,我遇到了让我困惑的情况,我尝试在放入线程的函数中抛出异常,并且在 main() 函数中我有一个 try 和 catch 块,但是我仍然收到这些错误:

1. terminate called after throwing an instance of 'char const*'

2. terminate called recursively

下面是我的代码

mutex m;

void AccumulateRange(uint64_t &sum, uint64_t start, uint64_t end) {
    for (uint64_t i = start;i<end;++i){
        sum+=i;
        if (sum>10) 
            throw "Number Exceed";
    }
}

int main(){

    const uint64_t num_threads = 1000;
    uint64_t nums = 1000*1000*1000;
    vector<uint64_t> v(num_threads);
    vector<thread> threads;
    uint64_t steps = nums/num_threads;

    for (uint64_t i = 0;i<num_threads;++i){
        try{
            threads.push_back(thread(AccumulateRange,ref(v[i]),steps*i,(i+1)*steps));
        }
        catch (const char& exception){
            cout<<exception<<endl;
        }
    }
    for …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading

2
推荐指数
1
解决办法
271
查看次数