| 62 | } |
| 63 | |
| 64 | TEST(UtilsTest, ConvOpInfo) { |
| 65 | int batch = 32; |
| 66 | int rows = 7; |
| 67 | int cols = 9; |
| 68 | int filter_rows = 3; |
| 69 | int filter_cols = 3; |
| 70 | int out_rows = 7; |
| 71 | int out_cols = 9; |
| 72 | int in_depth = 3; |
| 73 | int out_depth = 5; |
| 74 | int stride = 1; |
| 75 | |
| 76 | std::unordered_map<string, const NodeDef*> name_to_node; |
| 77 | GraphDef graph; |
| 78 | NodeDef* input = graph.add_node(); |
| 79 | name_to_node["input"] = input; |
| 80 | CreateConstOp("input", {batch, rows, cols, in_depth}, input); |
| 81 | NodeDef* filter = graph.add_node(); |
| 82 | name_to_node["filter"] = filter; |
| 83 | CreateConstOp("filter", {filter_rows, filter_cols, in_depth, out_depth}, |
| 84 | filter); |
| 85 | NodeDef* output_backprop = graph.add_node(); |
| 86 | name_to_node["output_backprop"] = output_backprop; |
| 87 | CreateConstOp("output_backprop", {batch, out_rows, out_cols, out_depth}, |
| 88 | output_backprop); |
| 89 | NodeDef* input_sizes = graph.add_node(); |
| 90 | name_to_node["input_sizes"] = input; |
| 91 | CreateConstSizesOp("input_sizes", |
| 92 | std::vector<int32>({batch, rows, cols, in_depth}), |
| 93 | input_sizes); |
| 94 | NodeDef* filter_sizes = graph.add_node(); |
| 95 | name_to_node["filter_sizes"] = filter_sizes; |
| 96 | CreateConstSizesOp( |
| 97 | "filter_sizes", |
| 98 | std::vector<int32>({filter_rows, filter_cols, in_depth, out_depth}), |
| 99 | filter_sizes); |
| 100 | |
| 101 | TensorShape paddings_shape({4, 2}); |
| 102 | Tensor paddings_tensor(DT_INT32, paddings_shape); |
| 103 | for (int64 i = 0; i < paddings_tensor.NumElements(); ++i) { |
| 104 | paddings_tensor.flat<int32>()(i) = 0; |
| 105 | } |
| 106 | TF_CHECK_OK(NodeDefBuilder("paddings", "Const") |
| 107 | .Attr("dtype", DT_INT32) |
| 108 | .Attr("value", paddings_tensor) |
| 109 | .Finalize(graph.add_node())); |
| 110 | |
| 111 | // Now add the convolution op |
| 112 | NodeDef* conv = graph.add_node(); |
| 113 | TF_CHECK_OK(NodeDefBuilder("conv2d", "Conv2D") |
| 114 | .Input("input", 0, DT_FLOAT) |
| 115 | .Input("filter", 0, DT_FLOAT) |
| 116 | .Attr("strides", {1, stride, stride, 1}) |
| 117 | .Attr("padding", "SAME") |
| 118 | .Finalize(conv)); |
| 119 | |
| 120 | NodeDef* conv_bp_in = graph.add_node(); |
| 121 | TF_CHECK_OK(NodeDefBuilder("conv2d_bp_in", "Conv2DBackpropInput") |
nothing calls this directly
no test coverage detected