小编kaf*_*man的帖子

从给定步幅/步长的numpy数组中取出子阵列

假设我有一个Python Numpy数组a.

a = numpy.array([1,2,3,4,5,6,7,8,9,10,11])
Run Code Online (Sandbox Code Playgroud)

我想从这个长度为5的数组创建一个子序列矩阵,步长为3.结果矩阵因此如下所示:

numpy.array([[1,2,3,4,5],[4,5,6,7,8],[7,8,9,10,11]])
Run Code Online (Sandbox Code Playgroud)

实现这一点的一种可能方式是使用for循环.

result_matrix = np.zeros((3, 5))
for i in range(0, len(a), 3):
  result_matrix[i] = a[i:i+5]
Run Code Online (Sandbox Code Playgroud)

有没有更简洁的方法来实现这个Numpy?

python numpy vectorization

25
推荐指数
2
解决办法
5634
查看次数

计算复合损失函数各部分的梯度范数

假设我有以下损失功能:

loss_a = tf.reduce_mean(my_loss_fn(model_output, targets))
loss_b = tf.reduce_mean(my_other_loss_fn(model_output, targets))
loss_final = loss_a + tf.multiply(alpha, loss_b)
Run Code Online (Sandbox Code Playgroud)

要想象渐变的标准,loss_final可以做到这一点:

optimizer = tf.train.AdamOptimizer(learning_rate=0.001)
grads_and_vars = optimizer.compute_gradients(loss_final)
grads, _ = list(zip(*grads_and_vars))
norms = tf.global_norm(grads)
gradnorm_s = tf.summary.scalar('gradient norm', norms)
train_op = optimizer.apply_gradients(grads_and_vars, name='train_op')
Run Code Online (Sandbox Code Playgroud)

不过,我想梯度WRT的规范密谋loss_aloss_b分开.我怎样才能以最有效的方式做到这一点?我一定要叫compute_gradients(..)上都loss_aloss_b独立,然后将它们传递给前添加这两个梯度在一起optimizer.apply_gradients(..)?我知道由于求和规则,这在数学上是正确的,但它看起来有点麻烦,我也不知道如何正确地实现梯度的求和.而且,loss_final相当简单,因为它只是一个总和.如果loss_final更复杂,例如分裂怎么办?

我正在使用Tensorflow 0.12.

tensorflow

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

C++不能在模板化方法中调用方法(带模板)

我在名为'filter.h'的头文件中有以下方法:

namespace std{

//some code

template <class T, class S, class BorderMethod>
tImage<T> binomial(const tImage<T> &in, const size_t k = 3) {
   //do some computations

  tImage<T> img = in.convolve<T, BorderMethod>(in, kernel);
  return img;
}
}
Run Code Online (Sandbox Code Playgroud)

我注意到的第一件事:这个方法的定义发生在header-file中.这是标准程序吗?

现在,实际问题:convolve即使in拥有这样的方法,对方法的调用也不会起作用.这是convolve类中方法的定义tImage<T>:

tImage<T> convolve(const gravis::tImage<T>& image, const gravis::tArray<typename tImageTraits<T>::Float_t>& kernel);
Run Code Online (Sandbox Code Playgroud)

我该如何调用此功能?

c++ methods templates

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

使用VBA获取单词中的所有交叉引用

我有一个很大的word文档(> 400页),有很多标题的交叉引用.到目前为止,我总是提到标题的标题,但现在我想改变它并参考标题所在的页面.

我没有通过GUI找到解决方案(当然除了手动处理),所以我正在研究编写一些VBA.不幸的是,我只找到了一种方法来列出所有可以交叉引用的目标(via GetCrossReferenceItems),但我需要一种方法来访问实际的交叉引用字段.

你能帮帮我吗?交叉引用字段是否与超链接相同?

vba ms-word word-vba

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

if子句中的赋值无效

考虑下面的代码(我意识到这是不好的做法,只是好奇地看到它发生的原因):

#include <iostream>

int main() {
    bool show = false;
    int output = 3;

    if (show = output || show)
        std::cout << output << std::endl;
    std::cout << "show: " << show << std::endl;

    output = 0;
    if (show = output || show)
        std::cout << output << std::endl;
    std::cout << "show: " << show << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这打印

3
show: 1
0
show: 1
Run Code Online (Sandbox Code Playgroud)

所以,显然在第二个if子句中,分配output,0实际上并没有发生.如果我重写这样的代码:

#include <iostream>

int main() {
    bool show = false;
    int …
Run Code Online (Sandbox Code Playgroud)

c++ if-statement variable-assignment

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