stu1130 commented on a change in pull request #13614: Make to_tensor and
normalize to accept 3D or 4D tensor inputs
URL: https://github.com/apache/incubator-mxnet/pull/13614#discussion_r240795206
##########
File path: src/operator/image/image_random-inl.h
##########
@@ -123,28 +159,50 @@ inline bool NormalizeShape(const nnvm::NodeAttrs& attrs,
return true;
}
+void NormalizeImpl(const std::vector<TBlob> &inputs,
+ const std::vector<TBlob> &outputs,
+ const NormalizeParam ¶m,
+ const int length,
+ const int channel,
+ const int step = 0) {
+ MSHADOW_TYPE_SWITCH(outputs[0].type_flag_, DType, {
+ DType* input = inputs[0].dptr<DType>();
+ DType* output = outputs[0].dptr<DType>();
+
+ for (int i = 0; i < channel; ++i) {
+ DType mean = param.mean[param.mean.ndim() > 1 ? i : 0];
+ DType std_dev = param.std[param.std.ndim() > 1 ? i : 0];
+ for (int j = 0; j < length; ++j) {
+ output[step + i*length + j] = (input[step + i*length + j] - mean) /
std_dev;
+ }
+ }
+ });
+}
+
void Normalize(const nnvm::NodeAttrs &attrs,
const OpContext &ctx,
const std::vector<TBlob> &inputs,
const std::vector<OpReqType> &req,
const std::vector<TBlob> &outputs) {
const NormalizeParam ¶m = nnvm::get<NormalizeParam>(attrs.parsed);
- int nchannels = inputs[0].shape_[0];
- int length = inputs[0].shape_[1] * inputs[0].shape_[2];
-
- MSHADOW_TYPE_SWITCH(outputs[0].type_flag_, DType, {
- DType* input = inputs[0].dptr<DType>();
- DType* output = outputs[0].dptr<DType>();
-
- for (int i = 0; i < nchannels; ++i) {
- DType mean = param.mean[param.mean.ndim() > 1 ? i : 0];
- DType std = param.std[param.std.ndim() > 1 ? i : 0];
- for (int j = 0; j < length; ++j) {
- output[i*length + j] = (input[i*length + j] - mean) / std;
- }
+ // 3D input (c, h, w)
+ if (inputs[0].ndim() == 3) {
+ const int length = inputs[0].shape_[1] * inputs[0].shape_[2];
+ const int channel = inputs[0].shape_[0];
+ NormalizeImpl(inputs, outputs, param, length, channel);
+ } else if (inputs[0].ndim() == 4) {
+ // 4D input (n, c, h, w)
+ const int batch_size = inputs[0].shape_[0];
+ const int length = inputs[0].shape_[2] * inputs[0].shape_[3];
+ const int channel = inputs[0].shape_[1];
+ const int step = channel*length;
Review comment:
nit:
```suggestion
const int step = channel * length;
```
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services