小编Tem*_*mak的帖子

如何从脚本中覆盖 Hydra 工作目录?

我知道我可以通过hydra.run.dir=XXX从命令行设置来更改配置中的工作目录。但是如何从不使用 CLI 参数的脚本中正确执行此操作,甚至将日志保存在我设置的目录中?

该代码不起作用,因为:

  1. 当我尝试更改目录时,Hydra 及其记录器已经初始化
  2. 没有这样的属性cfg.hydra。

UPD:我在评论中得到了指示。if __name__ == 'main':我可以在调用 Hydra 之前更改块中的 Hydra 参数。hydra.run.dir但如何从脚本中获取和修改呢?

    @hydra.main(config_path="conf", config_name="config")
    def main(cfg):
        cfg.hydra.run.dir = "./c_out/cached_loss"  # no such attribute
        logger.info('I log something')
Run Code Online (Sandbox Code Playgroud)

我的九头蛇配置如下所示:

defaults:                     
  - hydra/job_logging: custom_logging 
Run Code Online (Sandbox Code Playgroud)
# hydra/custom_logging.yaml
# python logging configuration for tasks                           
version: 1                                                         
formatters:                                                        
  simple:                                                          
    format: '[%(asctime)s][%(name)s][%(levelname)s] - %(message)s' 
handlers:                                                          
  console:                                                         
    class: logging.StreamHandler                                   
    formatter: simple                                              
    stream: ext://sys.stdout                                       
  file:                                                            
    class: logging.FileHandler                                     
    formatter: simple                                              
    # relative to the job log directory                            
    filename: …
Run Code Online (Sandbox Code Playgroud)

python fb-hydra

8
推荐指数
3
解决办法
8748
查看次数

愚蠢程序中的堆栈溢出异常

我正在使用VS 2010.
当我在调试模式下运行此程序时,它会抛出堆栈溢出异常,并在第99行的chkstk.asm文件中显示一个断行.
但是当我在Release模式下运行它时,它没问题.
此外,如果我将其中一个数组的大小减小到10000,它在Debug中运行良好.是什么原因?

#include <iostream>

using namespace std;
int main()
{
    char w[1000001], temp[1000001];
    cout<<"Why?"<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ stack-overflow visual-studio-2010 visual-c++

6
推荐指数
3
解决办法
3432
查看次数

如何在TensorFlow中构造任意文本摘要?

我想在TensorBoard中记录一些任意字符串.

我知道如何为任意标量做到这一点:

from tensorflow.core.framework import summary_pb2
value = summary_pb2.Summary.Value(tag='Accuracy', simple_value=0.95)
my_summary = summary_pb2.Summary(value=[value])

summary_writer = tf.summary.FileWriter()
summary_writer.add_summary(summary)
Run Code Online (Sandbox Code Playgroud)

但是对于任意文本摘要,如何做同样的事情呢?
像(不存在)的东西:

value = summary_pb2.Summary.Text(tag='MyTag', str='Arbitrary text come here')
Run Code Online (Sandbox Code Playgroud)

UPD:请注意,我提供了一个如何在不调用的情况下创建任意标量摘要的示例session.run(...).我希望能够为文本做到这一点.

logging tensorflow tensorboard

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

转换表面法向量和切向量

根据《基于物理的渲染:从理论到实现》一书。由Matt Pharr的,格雷格堪(链路,第86-87),
表面切向量被转换为通用矢量,使用变换矩阵中号,但
表面的法向矢量是使用转化在此处输入图片说明.

我想知道为什么缩放确实会使法线不正确,但不会触及切线向量?为什么法线如此特别?

看书上的图。 在此处输入图片说明

我已经读过,需要对法线进行这种变换以保持法线和切线的正交性。但我想得到一些直观的解释。

opengl math 3d

5
推荐指数
1
解决办法
907
查看次数

在CG Shader内的两次传递之间共享一个函数用于unity3d

我正在为Unity3d编写CG语言着色器.
如果为透明对象制作着色器,则需要创建两个相似的传递SubShader.第一个只渲染背面(带Cull Front),第二个只渲染正面(带Cull Back).但是顶点和片段函数的代码对于两次传递是相同的.

是否有可能不加倍代码并声明一些函数,这些函数将在传递之间共享?
我希望在我的代码示例中有类似的东西:

Shader "cool shader" {
Properties {
    ...
}
SubShader {

    CGPROGRAM
    // need to declare vertexOutput somewhow here
    float4 sharedFragFoo(vertexOutput i) : COLOR  // How to make smth like this?
    {
        ....
        return float4(...);
    }
    ENDCG

    pass {
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        vertexOutput vert(vertexInput v) {
            vertexOutput o;     
            ...
            return o;
        }

        float4 frag(vertexOutput i) : COLOR
        {
            return sharedFragFoo(i); // call the shared between …
Run Code Online (Sandbox Code Playgroud)

shader function unity-game-engine

5
推荐指数
2
解决办法
5027
查看次数

Octave 是否像 Matlab 一样支持枚举?

Octave 是否像 Matlab 一样支持枚举?
我还没有找到任何有关它的信息。

我们可以通过在类定义中添加枚举块来创建枚举类。例如,WeekDays 类枚举一周中的一组天(来自 Matlab 文档)。

%file WeekDays.m
classdef WeekDays
   enumeration
      Monday, Tuesday, Wednesday, Thursday, Friday
   end
end
Run Code Online (Sandbox Code Playgroud)

它在 Matlab 中运行良好,我访问枚举值

x = WeekDays.Tuesday;
Run Code Online (Sandbox Code Playgroud)

但Octave不会编译这一行,尽管文件 WeekDays.m 由 Octave 编译且没有错误。

matlab enumeration octave

5
推荐指数
1
解决办法
3166
查看次数

Keras会计算冻结层的梯度吗?

我使用Keras和tensorflow后端.
Will Keras还会计算我设置的图层的渐变trainable = False吗?

当我修复大部分层时,我没有观察到深度网络(如Resnet-50)的加速.看起来仍然计算固定层的渐变,但它们的值乘以0.任何人都可以告诉我这是真的吗?

这是一个小网络的例子,我修复了第一层.

import numpy as np
import keras
import keras.applications.resnet50

x = keras.layers.Input(shape=(5,))
y = keras.layers.Dense(5)(x)

z = keras.layers.Dense(5)(y)
model = keras.models.Model(x, z)
for layer in model.layers[:2]:
    layer.trainable = False

model.compile(optimizer='rmsprop', loss='mse')
print model.summary()

X = np.random.rand(100, 5)

model.fit(X, X, epochs=100)
Run Code Online (Sandbox Code Playgroud)

keras tensorflow keras-layer

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

什么是更快:创建一个新数组或迭代现有?

我有一个数组,例如(在Java中)

int[] a = new int[N];
Run Code Online (Sandbox Code Playgroud)

我已经使用它,现在想要有零的数组.什么将花费更少的时间:创建一个新的数组(它将被初始化为零)或迭代现有的数组并用零填充?

我想无论答案是什么,它在C++中都是一样的?

c++ java arrays initialization

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

构造大尺寸的vector <int>

我在OS X 10.9.3,2.4 GHz Intel Core i5,8 GB DDR3上运行以下代码

a.cpp

int main() {
  vector<int> expectation(10e8, -1.0);
  cout << "size()=" << expectation.size() << endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

b.cpp

int main() {
  vector<int> expectation(10e9, -1.0);
  cout << "size()=" << expectation.size() << endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

-

$ time ./a.out 
size()=1000000000

real    0m3.935s
user    0m1.530s
sys 0m2.103s

$ time ./b.out 
size()=10000000000

real    4m49.853s
user    0m16.186s
sys     0m22.966s
Run Code Online (Sandbox Code Playgroud)

在b.pp中,我们有10倍大的向量.
我想知道,为什么在情况下,时间b情况下的约100倍变得比大的情况下一个?

UPD
我找到了,我迷失了!
10e8 = 10 ^ 9 int = 4 …

c++ macos memory-management vector

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

在O(n)时从二叉搜索树中删除多个节点

考虑二叉搜索树,其中所有键都是唯一的.节点没有父指针.
我们有最多n/2个标记的节点.
我可以在O(n 2)时删除所有这些(使用postorder遍历,当遇到标记的节点时,在O(n)处删除每个).但这是不合适的.我需要一个算法来在O(n)时间删除所有标记的节点.谢谢.

编辑删除后,我需要保持节点顺序不变.
EDIT-2所以看起来我应该使用典型的删除删除每个标记的节点(在左子树中找到最右边的节点并将其与要删除的节点交换).

algorithm binary-search-tree

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