| #------------------------------------------------------------- |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # |
| #------------------------------------------------------------- |
| imgSize=$1 |
| numImg=$2 |
| numChannels=$3 |
| numFilters=$4 |
| filterSize=$5 |
| stride=$6 |
| pad=$7 |
| |
| P = $8 |
| Q = $9 |
| |
| # Assumption: NCHW image format |
| w=matrix(seq(1, numFilters*numChannels*filterSize*filterSize), rows=numFilters, cols=numChannels*filterSize*filterSize) |
| dout=matrix(seq(1, numImg*numFilters*P*Q), rows=numImg, cols=numFilters*P*Q) |
| if($11) { |
| zero_mask = (w - mean(w)) > 0 |
| w = w * zero_mask |
| } |
| else { |
| w = w - mean(w) |
| } |
| if($12) { |
| zero_mask = (dout - mean(dout)) > 0 |
| dout = dout * zero_mask |
| } |
| else { |
| dout = dout - mean(dout) |
| } |
| dx = conv2d_backward_data(w, dout, stride=[stride, stride], padding=[pad, pad], input_shape=[numImg, numChannels, imgSize, imgSize], filter_shape=[numFilters, numChannels, filterSize, filterSize]) |
| write(dx, $10, format="text") |