【发布时间】:2020-11-02 01:01:11
【问题描述】:
我学习了 Python 编程,现在正在学习 C++,所以如果我使用的术语不符合常规(也没有计算机科学教育或背景),我深表歉意。
我正在尝试用 C++ 构建一个神经元。权重通常作为数组传递。在实例化神经元时,我需要传递一组权重。我一直试图让神经元对象只引用指针,这样我就不必复制了,但我一直在做错事。有人可以更改这段代码,这样我就不会复制数组,然后解释你做了什么,以及你为什么这样做?
class Neuron {
private:
double bias;
int num_weights;
double weights[];
public:
Neuron(double*, int, double);
double forward_prop(double[]);
};
Neuron::Neuron(double weights[], int num_weights, double bias) {
this->num_weights = num_weights;
this->bias = bias;
// rotate through weights pointer and reassign to object attribute 'weights'
for (int i=0;i<this->num_weights;i++) {
this->weights[i] = weights[i];
}
// TODO: delete pointer
}
double Neuron::forward_prop(double values[]) {
double output = this->bias;
for (int i=0; i < this->num_weights; i++) {
output += this->weights[i] * values[i];
}
return output;
}
【问题讨论】:
-
在你的课堂上
double weights[];不是合法的 C++。 -
如果您想避免复制“数组”(实际上是一个指针),那么只需复制指针
this->weights = weights;。这是否是一个好主意是有争议的(至少可以说),但你会这样做。 -
您也不需要在几乎所有使用它的地方指定
this->。 -- 我学会了用 Python 编程 -- 一个警告:不要使用 Python(或任何其他语言)作为编写适当 C++ 代码的模型。 -
我一直试图让神经元对象只引用指针,这样我就不必复制了 -- 那么哪个实体拥有指针?是
Neuron对象,还是调用者? -
我认为你仍然应该坚持编写高级代码,但使用现代技术(例如,移动语义,使用具有良好缓存局部性的数据结构等)。如果存在性能问题(在使用分析器测量之后),则考虑使用指针的低级技术。
标签: c++ arrays pointers neural-network instantiation