我正在使用TensorFlow构建一个深度学习模型.TensorFlow的新手.
由于某种原因,我的模型具有有限的批量大小,然后这种有限的批量大小将使模型具有高的方差.
所以,我想用一些技巧来增加批量.我的想法是存储每个小批量的渐变,例如64个小批量,然后将渐变相加,使用这64个小批量训练数据的平均梯度来更新模型的参数.
这意味着对于前63个小批量,不更新参数,并且在64小批量之后,仅更新模型的参数一次.
但由于TensorFlow是基于图形的,有谁知道如何实现这个想要的功能?
非常感谢.
我有一个类取决于整数模板参数.在我的程序中的某一点,我想使用此模板的一个实例,具体取决于在运行时确定的此参数的值.这是一个简单的例子,演示了如何使用一个大的switch语句来解决这个问题:
#include <string>
#include <iostream>
#include <type_traits>
template<unsigned A>
struct Wrapper {
typedef typename std::conditional<A==1, int, float>::type DataType;
DataType content[A];
void foo() {
std::cout << A << std::endl;
};
};
int main(int argc, char *argv[])
{
std::string arg = argv[1];
int arg_int = std::stoi(arg);
switch (arg_int) {
case 1: {
Wrapper<1> w;
w.foo();
break;
}
case 2: {
Wrapper<2> w;
w.foo();
break;
}
case 3: {
Wrapper<3> w;
w.foo();
break;
}
default:
return 1;
};
return 0;
}
Run Code Online (Sandbox Code Playgroud)
一旦我不仅有一个参数A …
我正在学习使用OpenMP执行for循环的paralel的基础知识.
可悲的是,我的paralel程序运行速度比串行版慢10倍.我究竟做错了什么?我错过了一些障碍吗?
double **basicMultiply(double **A, double **B, int size) {
int i, j, k;
double **res = createMatrix(size);
omp_set_num_threads(4);
#pragma omp parallel for private(k)
for (i = 0; i < size; i++) {
for (j = 0; j < size; j++) {
for (k = 0; k < size; k++) {
res[i][j] += A[i][k] * B[k][j];
}
}
}
return res;
}
Run Code Online (Sandbox Code Playgroud)
非常感谢你!