| 1196 | } |
| 1197 | |
| 1198 | Status FusedBatchNormGradShape(shape_inference::InferenceContext* c) { |
| 1199 | string data_format_str; |
| 1200 | TF_RETURN_IF_ERROR(c->GetAttr("data_format", &data_format_str)); |
| 1201 | TensorFormat data_format; |
| 1202 | if (!FormatFromString(data_format_str, &data_format)) { |
| 1203 | return errors::InvalidArgument("Invalid data format string: ", |
| 1204 | data_format_str); |
| 1205 | } |
| 1206 | const int rank = |
| 1207 | (data_format_str == "NDHWC" or data_format_str == "NCDHW") ? 5 : 4; |
| 1208 | ShapeHandle y_backprop; |
| 1209 | TF_RETURN_IF_ERROR(c->WithRank(c->input(0), rank, &y_backprop)); |
| 1210 | ShapeHandle x; |
| 1211 | TF_RETURN_IF_ERROR(c->WithRank(c->input(1), rank, &x)); |
| 1212 | |
| 1213 | bool is_training; |
| 1214 | TF_RETURN_IF_ERROR(c->GetAttr("is_training", &is_training)); |
| 1215 | |
| 1216 | int channel_dim_index = GetTensorFeatureDimIndex(rank, data_format); |
| 1217 | DimensionHandle channel_dim = c->Dim(y_backprop, channel_dim_index); |
| 1218 | TF_RETURN_IF_ERROR( |
| 1219 | c->Merge(channel_dim, c->Dim(x, channel_dim_index), &channel_dim)); |
| 1220 | |
| 1221 | // covers scale, mean (reserve_space_1), variance (reserve_space_2) |
| 1222 | for (int i = 2; i < 5; ++i) { |
| 1223 | ShapeHandle vec; |
| 1224 | TF_RETURN_IF_ERROR(c->WithRank(c->input(i), 1, &vec)); |
| 1225 | TF_RETURN_IF_ERROR(c->Merge(channel_dim, c->Dim(vec, 0), &channel_dim)); |
| 1226 | } |
| 1227 | |
| 1228 | ShapeHandle x_backprop; |
| 1229 | TF_RETURN_IF_ERROR( |
| 1230 | c->ReplaceDim(y_backprop, channel_dim_index, channel_dim, &x_backprop)); |
| 1231 | c->set_output(0, x_backprop); |
| 1232 | c->set_output(1, c->Vector(channel_dim)); |
| 1233 | c->set_output(2, c->Vector(channel_dim)); |
| 1234 | c->set_output(3, c->Vector(0)); |
| 1235 | c->set_output(4, c->Vector(0)); |
| 1236 | return Status::OK(); |
| 1237 | } |
| 1238 | |
| 1239 | Status MaxPoolShape(shape_inference::InferenceContext* c) { |
| 1240 | string data_format_str; |
nothing calls this directly
no test coverage detected