我正在尝试为我正在实现的NN定义一个操作,但为了这样做,我需要迭代一个张量的维度.我在下面有一个小工作示例.
X = tf.placeholder(tf.float32, shape=[None, 10])
idx = [[i] for i in tf.range(X.get_shape()[0])]
Run Code Online (Sandbox Code Playgroud)
这会产生错误说明
ValueError: Cannot convert an unknown Dimension to a Tensor: ?
Run Code Online (Sandbox Code Playgroud)
使用相同的代码但使用tf.shape相反的代码时,会导致代码存在
X = tf.placeholder(tf.float32, shape=[None, 10])
idx = [[i] for i in tf.range(tf.shape(X)[0])]
Run Code Online (Sandbox Code Playgroud)
给出以下错误
TypeError: 'Tensor' object is not iterable.
Run Code Online (Sandbox Code Playgroud)
我正在实现这个NN的方式,batch_size直到训练函数(在代码末尾)才定义.这就是我自己构建图形的地方,因此在batch_size这一点上是未知的,并且它无法修复,因为训练batch_size和测试集batch_sizes是不同的.
解决这个问题的最佳方法是什么?这是保持我的代码运行的最后一件事,因为我让它运行一个固定的batch_size,虽然这些结果没用.我一直在倾注TensorFlow API文档和堆栈溢出数周无济于事.
我也尝试将占位符输入到范围内,所以当我运行测试/训练集时,代码将是以下
X = tf.placeholder(tf.float32, shape=[None, 10])
bs = tf.placeholder(tf.int32)
def My_Function(X):
# Do some stuff to X
idx = [[i] for i in …Run Code Online (Sandbox Code Playgroud) 我正在写一个积分计算器。我试图让 main.cpp 文件从 functions.h.cpp 文件中的函数类中读取函数。对于简单的情况,我有一个定义如下的函数:
double square(double aX)
{
return aX*aX;
}
Run Code Online (Sandbox Code Playgroud)
当我将它包含在主文件中时,这个函数可以工作,但当我尝试从主文件中调用它时,它不想工作,当它在函数文件中时。这是我拥有的代码:
Main.cpp 文件:
#include <iostream>
#include "IntegralCalculator.h"
#include "functions.h"
using namespace std;
int main()
{
IntegralCalculator Function(square);
Function.print();
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,还有另一个被调用的类IntegralCalculator,它实际上进行了积分的计算,尽管当函数定义包含在 main 中并且函数作为参数传递时,它应该没有错。该functions.h文件定义如下:
#ifndef FUNCTIONS_H
#define FUNCTIONS_H
#include <iostream>
#include <cmath>
#include "IntegralCalculator.h"
class functions : public IntegralCalculator
{
public:
functions();
double square(double aX);
};
#endif
Run Code Online (Sandbox Code Playgroud)
该functions.cpp文件定义如下:
#include <iostream>
#include <cmath>
#include "functions.h"
double functions::square(double aX)
{
return aX*aX;
}
Run Code Online (Sandbox Code Playgroud)
我知道现在我不需要这个<cmath>库,尽管当我添加它们时我会需要它来处理更复杂的函数。 …