@@ -22,35 +22,48 @@ class ConvolutionalLayer : public Layer {
2222 size_t stride_;
2323 size_t pads_;
2424 size_t dilations_;
25- Tensor kernel_;
26- Tensor bias_;
25+ std::shared_ptr< Tensor> kernel_;
26+ std::shared_ptr< Tensor> bias_;
2727 size_t group_;
2828 bool useLegacyImpl_;
2929
3030 public:
31- ConvolutionalLayer () : Layer(kConvolution ) {
31+ ConvolutionalLayer () : Layer(kConvolution ), kernel_( nullptr ), bias_( nullptr ) {
3232 stride_ = 0 ;
3333 pads_ = 0 ;
3434 dilations_ = 0 ;
3535 }
3636 ConvolutionalLayer (size_t step, size_t pads, size_t dilations,
3737 const Tensor& kernel, const Tensor& bias = Tensor(),
3838 size_t group = 1 , bool useLegacyImpl = false )
39- : Layer(kConvolution ) {
39+ : Layer(kConvolution ),
40+ kernel_ (std::make_shared<Tensor>(kernel)),
41+ bias_(std::make_shared<Tensor>(bias)) {
42+ stride_ = step;
43+ pads_ = pads;
44+ group_ = group;
45+ dilations_ = dilations;
46+ useLegacyImpl_ = useLegacyImpl;
47+ }
48+ ConvolutionalLayer (size_t step, size_t pads, size_t dilations,
49+ std::shared_ptr<Tensor> kernel,
50+ std::shared_ptr<Tensor> bias = std::make_shared<Tensor>(),
51+ size_t group = 1, bool useLegacyImpl = false)
52+ : Layer(kConvolution ),
53+ kernel_(std::move(kernel)),
54+ bias_(std::move(bias)) {
4055 stride_ = step;
4156 pads_ = pads;
4257 group_ = group;
4358 dilations_ = dilations;
44- kernel_ = kernel;
45- bias_ = bias;
4659 useLegacyImpl_ = useLegacyImpl;
4760 }
4861 void run (const std::vector<Tensor>& input,
4962 std::vector<Tensor>& output) override ;
5063 void run (const std::vector<Tensor>& input, std::vector<Tensor>& output,
5164 const RuntimeOptions& options) override ;
5265#ifdef ENABLE_STATISTIC_WEIGHTS
53- Tensor get_weights () override { return kernel_; }
66+ Tensor get_weights () override { return * kernel_; }
5467#endif
5568};
5669
0 commit comments