From fdcbcf4a3ee0662ea53488229f92fd9980a73281 Mon Sep 17 00:00:00 2001 From: jenniew Date: Tue, 1 Dec 2020 18:36:19 -0800 Subject: [PATCH] Fix SerializationUtils clone issue of QuantizedTensor (#3088) * update get extra param * add test * add check * fix clone parameter * fix test * fix test * update clone quantizedtensor * update --- .../analytics/bigdl/dllib/utils/Util.scala | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/bigdl/dllib/src/main/scala/com/intel/analytics/bigdl/dllib/utils/Util.scala b/bigdl/dllib/src/main/scala/com/intel/analytics/bigdl/dllib/utils/Util.scala index 0ea83775f63..e0cf62b498e 100644 --- a/bigdl/dllib/src/main/scala/com/intel/analytics/bigdl/dllib/utils/Util.scala +++ b/bigdl/dllib/src/main/scala/com/intel/analytics/bigdl/dllib/utils/Util.scala @@ -298,8 +298,31 @@ object Util { val param = parameters(i) param.getTensorType match { case QuantizedType => - retParams(i) = SerializationUtils.clone(param).asInstanceOf[QuantizedTensor[T]] - case _ => + val quantizedTensor = param.asInstanceOf[QuantizedTensor[T]] + val storage = new Array[Byte](quantizedTensor.nElement()) + System.arraycopy(quantizedTensor.getStorage, 0, + storage, 0, quantizedTensor.nElement()) + + val sizeLength = quantizedTensor.size.length + val size = new Array[Int](sizeLength) + System.arraycopy(quantizedTensor.size, 0, size, 0, sizeLength) + + val params = quantizedTensor.params.copy() + + val length = quantizedTensor.maxOfRow.length + val maxOfRow = new Array[T](length) + System.arraycopy(quantizedTensor.maxOfRow, 0, maxOfRow, 0, length) + + val minOfRow = new Array[T](length) + System.arraycopy(quantizedTensor.minOfRow, 0, minOfRow, 0, length) + + val sumOfRow = new Array[T](length) + System.arraycopy(quantizedTensor.sumOfRow, 0, sumOfRow, 0, length) + + retParams(i) = QuantizedTensor[T](storage, maxOfRow, minOfRow, sumOfRow, size, + params) + + case _ => retParams(i) = if (isCompacted) { Tensor[T](resultStorage, param.storageOffset(), param.size(), param.stride()) } else {