在创建新的 conda 环境时,有没有办法指定架构/平台?或者,conda 在运行时如何检测其当前的架构/平台?
我的目标是:我在 Apple Silicon 笔记本电脑上运行。我现有的环境通过 Rosetta2 运行良好,但我想开始试验在 Apple Silicon 上本地运行的 python。miniforge提供了一个带有 Apple Silicon 构建的 conda-forge 存储库,我可以conda-forge在创建环境时告诉 conda 使用该通道。但是除了从 miniforge 的安装程序开始之外,我没有看到一种方法来指定我希望这是一个 arm64 环境而不是 x86_64 环境。
提前致谢。
我需要弄清楚我可以提供给gcc的编译器/链接器指令,以便在指定-fopenmp时它不会自动链接libgomp.
原因是我正试图建立英特尔的MKL BLAS.MKL需要添加单独的英特尔库来处理多线程(例如,libmkl_intel_thread或libmkl_gnu_thread).但是,用于链接MKL和libgomp的库并不适用于包括我在内的每个操作系统.这迫使我链接libmkl_intel_thread,而libmkl_intel_thread又必须链接libiomp5.
虽然我能够构建我的包,但是一些二进制文件链接到libgomp和libiomp5.我不积极,这是造成问题,但也出现了一些事故,联动组合是可疑的,即使它不会导致崩溃的肯定是一个可怕的低效率.
我正在尝试使用gcc 4.9.1.
不幸的是,避免-fopenmp不是一种选择.原因是这是用于编译由几个子包组成的相当大的包,其Makefile不是最好的形状,并且可以在以后编译来自其他源(插件)的其他包.强制通用编译器/链接器指令并不困难.但是,启用--enable-openmp会激活-fopenmp和定义用于触发与多线程相关的代码的定义.试图将三者(--enable-openmp,-fopenmp和链接到--enable-openmp的代码)分开是不可行的.
我查看了手册页,我没有看到任何允许选择openmp库的gcc指令.英特尔的论坛有一个非常古老的讨论,他们建议在-fopenmp之后立即指定一个静态库,然后是--as-needed.这似乎非常摇摇晃晃,并且还有很多潜在的干扰插件包.llvm-openmp似乎在某一点上考虑了-fopenmp = libiomp5指令,但它似乎已经在3.5版本中被删除了,我试图使用gcc.
谢谢.
我正试图在keras中使用这种设计实现神经(ish)网络:http: //nlp.cs.rpi.edu/paper/AAAI15.pdf
该算法基本上具有三个输入.输入2和输入3乘以相同的权重矩阵W1以产生O2和O3.输入1乘以W2以产生O1.然后,我们需要取O1*O2和O1*O3的点积.
我正试图在keras中实现这一点.
我的第一个想法是使用keras Graph类并使W1成为具有两个输入和两个输出的共享节点层.好到目前为止.
然后出现了如何用O1取这两个输出的点积的问题.
我试图定义一个自定义函数:
def layer_mult(X, Y):
return K.dot(X * K.transpose(Y))
Run Code Online (Sandbox Code Playgroud)
然后:
ntm.add_node(Lambda(layer_mult, output_shape = (1,1)), name = "ls_pos", inputs = ["O1", "O2"])
ntm.add_node(Lambda(layer_mult, output_shape = (1,1)), name = "ls_neg", inputs = ["O1", "O3"])
Run Code Online (Sandbox Code Playgroud)
编译时出现的问题是keras只想给Lambda层一个输入:
1045 func = types.FunctionType(func, globals())
1046 if hasattr(self, 'previous'):
-> 1047 return func(self.previous.get_output(train))
1048 else:
1049 return func(self.input)
TypeError: layer_mult() takes exactly 2 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)
我认为另一种选择可能是使用一个Merge类,它具有dot允许合并的类型.但是,类的输入层Merge必须传递给构造函数.因此,似乎没有办法从共享节点获取输出Merge到添加Merge到Graph …
我有data.frame很多列的名称遵循一个模式。如:
df <- data.frame(
x_1 = c(1, NA, 3),
x_2 = c(1, 2, 4),
y_1 = c(NA, 2, 1),
y_2 = c(5, 6, 7)
)
Run Code Online (Sandbox Code Playgroud)
我想申请mutate_at对每对列执行相同的操作。如:
df %>%
mutate(
x = ifelse(is.na(x_1), x_2, x_1),
y = ifelse(is.na(y_1), y_2, y_1)
)
Run Code Online (Sandbox Code Playgroud)
有没有办法用mutate_at/做到这一点mutate_each?
这个:
df %>%
mutate_each(vars(x_1, y_1), funs(ifelse(is.na(.), vars(x_2, y_2), .)))
Run Code Online (Sandbox Code Playgroud)
我尝试过的各种变体都失败了。
该问题类似于在 dplyr mutate_at 调用中使用多列的函数,但不同之处在于函数调用的第二个参数不是单个列,而是 vars 中每列的不同列。
提前致谢。
我试图用来cython包装一个C++库(fastText如果相关的话).C++库类从磁盘加载一个非常大的数组.我的包装器从C++库中实例化一个类来加载数组,然后使用cython内存视图并将numpy.asarray数组转换为numpy数组,然后调用torch.from_numpy以创建张量.
出现的问题是如何处理为阵列释放内存.
现在,我得到pointer being freed was not allocated程序退出时.我希望这是因为C++代码和numpy/ pytorch都试图管理同一块RAM.
我可以简单地在C++库中注释掉析构函数,但这感觉就像它将导致我在路上遇到不同的问题.
我该如何处理这个问题?是否有任何关于如何使用C++处理内存共享的最佳实践文档cython?
如果我修改C++库来包装在一个阵列shared_ptr,将cython(和numpy,pytorch等)共享shared_ptr正确?
如果问题是天真的,我道歉; Python垃圾收集对我来说非常神秘.
任何建议表示赞赏.