25 #ifndef MSHADOW_EXTENSION_SPATIAL_UNPOOL_H_ 26 #define MSHADOW_EXTENSION_SPATIAL_UNPOOL_H_ 28 #include "../extension.h" 38 template<
typename Reducer,
typename SrcExp,
typename DType,
int srcdim>
40 public MakeTensorExp<UnPoolingExp<Reducer, SrcExp, DType, srcdim>,
41 SrcExp, srcdim, DType> {
62 const SrcExp &data_pooled,
63 const SrcExp &grad_pooled,
65 : data_src_(data_src), data_pooled_(data_pooled),
66 grad_pooled_(grad_pooled),
67 ksize_y_(ksize_y), ksize_x_(ksize_x),
68 kstride_y_(kstride_y), kstride_x_(kstride_x) {
71 CHECK_EQ(pshape, ShapeCheckSrcDimSrcExp::Check(data_pooled))
72 <<
"UnPoolingExp: pooled shape mismatch";
74 for (
int k = 0; k < srcdim - 2; ++k) {
75 CHECK_EQ(pshape[k], sshape[k]) <<
"UnPoolingExp: pool and src shape mismatch";
77 pshape_x_ = pshape[srcdim - 1];
78 pshape_y_ = pshape[srcdim - 2];
98 template<
typename Reducer,
typename SrcExp,
typename DType,
int etype>
105 (data_src.
self(), data_pooled.
self(), grad_pooled.
self(),
106 ksize_y, ksize_x, kstride_y, kstride_x);
111 template<
typename Reducer,
typename SrcExp,
typename DType,
int srcdim>
123 const index_t y = i % sshape_y_;
124 const index_t c = i / sshape_y_;
133 DType val =
static_cast<DType
>(0);
134 for (
index_t py = py_min; py < py_max; ++py) {
135 for (
index_t px = px_min; px < px_max; ++px) {
136 val += Reducer::PartialGrad(vsrc,
153 #endif // MSHADOW_EXTENSION_SPATIAL_UNPOOL_H_ const SubType & self(void) const
Definition: expression.h:82
const SrcExp & grad_pooled_
gradient data of pooled part, to be propgate down
Definition: spatial_unpool.h:47
Definition: expr_engine-inl.h:58
index_t kstride_x_
kernel stride in x directory
Definition: spatial_unpool.h:59
Definition: optional.h:251
index_t ksize_x_
kernel size in width
Definition: spatial_unpool.h:55
index_t pshape_x_
shape of pooled expression
Definition: spatial_unpool.h:51
const SrcExp & data_pooled_
result of pooled data, corresponds to result of pooling
Definition: spatial_unpool.h:45
unpooling expr reverse operation of pooling, used to pass gradient back
Definition: spatial_unpool.h:39
static Shape< dim > Check(const E &t)
MSHADOW_XINLINE DType Eval(index_t i, index_t j) const
Definition: spatial_unpool.h:120
const SrcExp & data_src_
source input, corresponds to src in pooling
Definition: spatial_unpool.h:43
#define MSHADOW_XINLINE
Definition: base.h:230
int32_t index_t
type that will be used for index
Definition: base.h:343
Plan(const UnPoolingExp< Reducer, SrcExp, DType, srcdim > &e)
Definition: spatial_unpool.h:114
runtime shape checking template get the shape of an expression, report error if shape mismatch ...
Definition: expr_engine-inl.h:364
index_t pshape_y_
shape of pooled expression
Definition: spatial_unpool.h:49
UnPoolingExp(const SrcExp &data_src, const SrcExp &data_pooled, const SrcExp &grad_pooled, index_t ksize_y, index_t ksize_x, index_t kstride_y, index_t kstride_x)
constructor
Definition: spatial_unpool.h:61
defines how expression exp can be evaluated and stored into dst
Definition: expression.h:79
Plan< BinaryMapExp< OP, TA, TB, DType, etype >, DType > MakePlan(const BinaryMapExp< OP, TA, TB, DType, etype > &e)
Definition: expr_engine-inl.h:239
a general class that allows extension that makes tensors of some shape
Definition: expr_engine-inl.h:43
index_t ksize_y_
kernel size in height
Definition: spatial_unpool.h:53
overloaded + operator between half_t and bf16_t
Definition: base.h:334
Shape< dim > shape_
the shape of this expression
Definition: expr_engine-inl.h:47
UnPoolingExp< Reducer, SrcExp, DType, ExpInfo< SrcExp >::kDim > unpool(const Exp< SrcExp, DType, etype > &data_src, const Exp< SrcExp, DType, etype > &data_pooled, const Exp< SrcExp, DType, etype > &grad_pooled, index_t ksize_y, index_t ksize_x, index_t kstride_y, index_t kstride_x)
unpooling gradient for 4D, backprop gradient value back, revserse operation of pooling, same as unpooling, but allows unequal size of kernel
Definition: spatial_unpool.h:100
index_t kstride_y_
kernel stride in y directory
Definition: spatial_unpool.h:57