내가 겪고있는 문제와 관련된 코드는 다음과 같습니다. 아이겐 (Eigen)을 사용하여 신경망을 작성하려고합니다. 나는 신경 네트워크의 레이어를 구현하기 위해 Eigen의 텐서를 사용하고 싶지만 어떻게 확신 할 수는 없습니다. Eigen의 텐서는 제가 텐서의 차원 수에 대한 타입과 int라는 두 개의 템플릿 인자를 입력해야합니다. 사용하려는 유일한 유형은 double이지만, 각 Layer는 입력 Tensor를 가져 와서 출력 Dimension을 반환해야합니다. 따라서 Layer 클래스에 두 개의 숫자에 대한 템플릿이 있어야합니다. 그러나 이렇게하면 레이어의 표준 벡터를 가질 수 없습니다. 이 주위에 어떤 방법이 있습니까? 또한 말할 수 있듯이 Layer 클래스는 다른 클래스가 그 클래스로부터 상속 받기 때문에 추상 클래스입니다 (이것이 내가 std :: vector에 넣을 수 있기를 바랍니다). Boost의 변형 클래스를 살펴 봤지만 사용하기 전에 사용할 수있는 모든 가능한 유형의 레이어를 명시 적으로 추가 할 수 있다고 생각하지 않기 때문에 사용할 수 있는지 잘 모르겠습니다. 어떻게 든 템플릿을 사용하여 자동으로 그렇게 할 수 있다면 어떨까요?템플릿 클래스의 다른 유형의 벡터입니까?
#include <unsupported/Eigen/CXX11/Tensor>
template<int inputDims, int outputDims>
class Layer{
public:
virtual ~Layer();
virtual Eigen::Tensor<double,outputDims> fire(Eigen::Tensor<double,inputDims>) = 0;
virtual Eigen::Tensor<double,outputDims> derivative(Eigen::Tensor<double,inputDims>) = 0;
};
std::vector<Layer> v; //Doesn't compile
'표준 : : 벡터> V,'예를 들어, 좋은하지? –
그걸 컴파일하지만, 원하는 경우 레이어 <3,4>을 추가 할 수 없습니다. – BadProgrammer99
'Layer <10,20> '은'Layer <3.4> '과 같은 유형이 아닙니다. 이것은 'Car' 클래스와'Chair' 클래스가 있고 같은 벡터에 넣고 싶을 때와 다르지 않습니다. 그래서이 문제는 여러 유형을 포함 할 수있는 하나의 컨테이너를 생각해내는 것까지로 이어집니다. 그래서 저는 중복 된 질문과 답변이 있다는 것을 확신합니다. – PaulMcKenzie