我正在用自己的 Matrix 類構建自己的神經網路。
我試圖swishMatrix()在Matrix2D類物件上使用該函式,然后再將其添加到vector<Matrix2D>變數中。但是我收到這個錯誤,我不知道為什么。->no matching function for call to 'std::vector<Matrix2D>::push_back(int)'|
當我swishMatrix()在普通Matrix2D物件上使用它時,它作業正常。
這是Matrix2D課堂
class Matrix2D{
public:
int rows;
int columns;
vector<vector<float> > matrix;
Matrix2D() = default;
Matrix2D(int x, int y){
rows = x;
columns = y;
for (int i = 0; i < rows; i ) {
vector<float> v1;
for (int j = 0; j < columns; j ) {
v1.push_back(0);
}
matrix.push_back(v1);
}
}
swishMatrix(){
for (int i = 0; i < rows; i ) {
for (int j = 0; j < columns; j ) {
matrix[i][j] = matrix[i][j] * sigmoid(matrix[i][j]);
}
}
}
//Here there's a lot of static functions for matrix operations
};
這是Neural Network課堂
class NeuralNewtork{
public:
//A lot more declaration here but not important
Matrix2D first_hidden_weights;
Matrix2D input_nodes;
vector<Matrix2D> hidden_weights;
vector<Matrix2D> hidden_biases;
vector<Matrix2D> activated_hidden_nodes;
NeuralNewtork(int input_nodes, int hidden_layers, int hidden_nodes, int action_nodes){
first_hidden_weights = Matrix2D(numberof_hidden_nodes, numberof_input_nodes);
first_hidden_weights.randomizeMatrix();
hidden_weights.reserve(numberof_hidden_layers-1);
for (int i=0; i<numberof_hidden_layers-1; i ){
hidden_weights.push_back(Matrix2D(numberof_hidden_nodes, numberof_hidden_nodes));
hidden_weights.back().randomizeMatrix();
}
hidden_biases.reserve(numberof_hidden_layers);
for (int i=0; i<numberof_hidden_layers; i ){
hidden_biases.push_back(Matrix2D(numberof_hidden_nodes, 1));
hidden_biases.back().randomizeMatrix();
}
//There are more declerations here but they aren't important for this problem
}
feedForward(Matrix2D input){
input_nodes = input;
for(int i = 0; i < numberof_hidden_layers 1; i ){
if(i==0){
activated_hidden_nodes.push_back(Matrix2D::matrixAddition(Matrix2D::matrixMultiplication(first_hidden_weights, input_nodes), hidden_biases[0]).swishMatrix());
//This is the line where I get the error
//no matching function for call to 'std::vector<Matrix2D>::push_back(int)'|
}
if(i!=0 && i!=numberof_hidden_layers){
activated_hidden_nodes.push_back(Matrix2D::matrixAddition(Matrix2D::matrixMultiplication(hidden_weights[i-1], activated_hidden_nodes[i-1]), hidden_biases[i]).swishMatrix());
//This is also a line where I get the error
//no matching function for call to 'std::vector<Matrix2D>::push_back(int)'|
}
if(i==numberof_hidden_layers){
//Not important
}
}
}
我可能錯過了代碼的某些部分,很難保持簡短,但所有需要的變數都已正確分配。
uj5u.com熱心網友回復:
簡單的解決方法是swishMatrix再次回傳矩陣物件:
Matrix2D& swishMatrix(){
for (int i = 0; i < rows; i ) {
for (int j = 0; j < columns; j ) {
matrix[i][j] = matrix[i][j] * sigmoid(matrix[i][j]);
}
}
return *this;
}
永遠不要在方法上沒有明確回傳型別的情況下再次撰寫代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/359081.html
