diff --git a/example/mnist/linear.go b/example/mnist/linear.go index 3e2cf97..e690fdc 100644 --- a/example/mnist/linear.go +++ b/example/mnist/linear.go @@ -66,9 +66,6 @@ func runLinear() { * bs.ZeroGrad() * loss.MustBackward() * - * // TODO: why `loss` need to print out to get updated? - * fmt.Printf("loss (epoch %v): %v\n", epoch, loss.MustToString(0)) - * * ts.NoGrad(func() { * ws.MustAdd_(ws.MustGrad().MustMul1(ts.FloatScalar(-1.0))) * bs.MustAdd_(bs.MustGrad().MustMul1(ts.FloatScalar(-1.0))) diff --git a/libtch/tensor.go b/libtch/tensor.go index 10731e9..d48678e 100644 --- a/libtch/tensor.go +++ b/libtch/tensor.go @@ -221,6 +221,7 @@ func AtSaveMulti(tensors []Ctensor, tensor_names []string, ntensors int, filenam cpointerSize := 4 cnamesPtr := (*[1 << 30]**C.char)(C.malloc(C.size_t(cpointerSize * len(tensor_names)))) + defer C.free(unsafe.Pointer(cnamesPtr)) for i := 0; i < len(tensor_names); i++ { cname := C.CString(tensor_names[i]) cnamesPtr[i] = &cname diff --git a/tensor/tensor-generated-sample.go b/tensor/tensor-generated-sample.go index 1ae247e..7574c03 100644 --- a/tensor/tensor-generated-sample.go +++ b/tensor/tensor-generated-sample.go @@ -583,6 +583,8 @@ func (ts Tensor) MustLogSoftmax(dim int64, dtype int32) (retVal Tensor) { func (ts Tensor) NllLoss(target Tensor) (retVal Tensor, err error) { ptr := (*lib.Ctensor)(unsafe.Pointer(C.malloc(0))) + // NOTE: uncomment this causes panic + // defer C.free(unsafe.Pointer(ptr)) weight := NewTensor() diff --git a/tensor/tensor.go b/tensor/tensor.go index 271cbfb..e833a81 100644 --- a/tensor/tensor.go +++ b/tensor/tensor.go @@ -466,7 +466,7 @@ func RunBackward(tensors []Tensor, inputs []Tensor, keepGraphB bool, createGraph // TODO: Are they allocated continouslly??? for i := 0; i < len(inputs); i++ { outputPtr := (*lib.Ctensor)(unsafe.Pointer(C.malloc(0))) - // defer C.free(unsafe.Pointer(outputPtr)) + defer C.free(unsafe.Pointer(outputPtr)) outputsPtr = append(outputsPtr, outputPtr) } diff --git a/tensor/util.go b/tensor/util.go index 74a5be5..760c469 100644 --- a/tensor/util.go +++ b/tensor/util.go @@ -53,6 +53,8 @@ func init() { func CMalloc(nbytes int) (dataPtr unsafe.Pointer, buf *bytes.Buffer) { dataPtr = C.malloc(C.size_t(nbytes)) + // NOTE: uncomment this cause panic! + // defer C.free(unsafe.Pointer(dataPtr)) // Recall: 1 << 30 = 1 * 2 * 30 // Ref. See more at https://stackoverflow.com/questions/48756732