"tests/vscode:/vscode.git/clone" did not exist on "703e42ee4b3efed3c71e7ae7d15f0f96e05722d4"
tf_test.cpp 7.47 KB
Newer Older
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <vector>
#include <migraphx/literal.hpp>
#include <migraphx/operators.hpp>
#include <migraphx/program.hpp>
#include <migraphx/instruction.hpp>
#include <migraphx/tf.hpp>
#include "test.hpp"

10
11
12
13
14
15
16
17
18
19
20
21
22
TEST_CASE(add_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 2, 2, 3}});
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {1, 2, 2, 3}});
    p.add_instruction(migraphx::op::add{}, l0, l1);
    auto prog = migraphx::parse_tf("add_test.pb", false);

    EXPECT(p == prog);
}

TEST_CASE(add_bcast_test)
{
Khalique's avatar
Khalique committed
23

24
25
26
27
28
29
30
31
32
33
34
35
    migraphx::program p;
    migraphx::shape s0{migraphx::shape::float_type, {2, 3}};
    auto l0 = p.add_parameter("0", s0);
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {2, 1}});
    auto l2 = p.add_instruction(migraphx::op::multibroadcast{s0.lens()}, l0);
    auto l3 = p.add_instruction(migraphx::op::multibroadcast{s0.lens()}, l1);
    p.add_instruction(migraphx::op::add{}, l2, l3);
    auto prog = migraphx::parse_tf("add_bcast_test.pb", false);

    EXPECT(p == prog);
}

36
37
TEST_CASE(batchnorm_test)
{
Khalique's avatar
Khalique committed
38
39
    float epsilon  = 1.001e-5f;
    float momentum = 0.9f;
40
41

    migraphx::program p;
Khalique's avatar
Khalique committed
42
43
    migraphx::op::batch_norm_inference op{
        epsilon, momentum, migraphx::op::batch_norm_inference::spatial};
44
    migraphx::shape s0{migraphx::shape::float_type, {32}};
45
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 32, 16, 16}});
46
47
    std::vector<float> const_vals(32);
    std::fill(const_vals.begin(), const_vals.end(), 1.0f);
Khalique's avatar
Khalique committed
48

49
50
51
52
53
54
55
56
57
58
    auto l2 = p.add_parameter("2", s0);
    auto l3 = p.add_parameter("3", s0);
    auto l4 = p.add_parameter("4", s0);
    auto l1 = p.add_literal(migraphx::literal{s0, const_vals});
    p.add_instruction(op, l0, l1, l2, l3, l4);
    auto prog = migraphx::parse_tf("batchnorm_test.pb", true);

    EXPECT(p == prog);
}

59
60
61
TEST_CASE(biasadd_test)
{
    migraphx::program p;
62
    migraphx::shape s0{migraphx::shape::float_type, {1, 500, 1, 1}};
63
    uint64_t axis = 1;
Khalique's avatar
Khalique committed
64
    auto l0       = p.add_parameter("0", s0);
65
66
67
    auto l1       = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {500}});
    auto l2       = p.add_instruction(migraphx::op::broadcast{axis, l0->get_shape()}, l1);
    p.add_instruction(migraphx::op::add{}, l0, l2);
68
69
70
71
72
    auto prog = migraphx::parse_tf("biasadd_test.pb", true);

    EXPECT(p == prog);
}

73
74
75
TEST_CASE(concat_test)
{
    migraphx::program p;
Khalique's avatar
Khalique committed
76

77
78
79
80
81
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {4, 7, 3}});
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {4, 2, 3}});

    int axis = 1;
    // tf uses axis as the third input, and it is in int32 format
Khalique's avatar
Khalique committed
82
83
    // add the literal using a vector in order to set stride to 1 (like in tf parser)
    p.add_literal(migraphx::shape{migraphx::shape::int32_type, {1}}, std::vector<int>{axis});
84
85
86
87
88
89
90
91
92
93

    p.add_instruction(migraphx::op::concat{static_cast<std::size_t>(axis)}, l0, l1);
    auto prog = migraphx::parse_tf("concat_test.pb", false);

    EXPECT(p == prog);
}

TEST_CASE(const_test)
{
    migraphx::program p;
Khalique's avatar
Khalique committed
94
    p.add_literal(migraphx::shape{migraphx::shape::float_type, {1}}, std::vector<float>{1.0f});
95
96
97
98
99
100
101
102
    auto prog = migraphx::parse_tf("constant_test.pb", false);

    EXPECT(p == prog);
}

TEST_CASE(conv_test)
{
    migraphx::program p;
Khalique's avatar
Khalique committed
103

104
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 16, 16}});
Khalique's avatar
Khalique committed
105
    std::vector<float> weight_data(3 * 3 * 3 * 32);
106
    std::fill(weight_data.begin(), weight_data.end(), 1.0f);
Khalique's avatar
Khalique committed
107
108
    auto l1 =
        p.add_literal(migraphx::shape{migraphx::shape::float_type, {3, 3, 3, 32}}, weight_data);
109
110
111

    migraphx::op::convolution op;
    op.padding_mode = migraphx::op::padding_mode_t::same;
Khalique's avatar
Khalique committed
112
113
    op.stride       = {1, 1};
    op.dilation     = {1, 1};
114
115
116
    auto l2         = p.add_instruction(migraphx::op::transpose{{0, 3, 1, 2}}, l1);
    auto l3         = p.add_instruction(migraphx::op::transpose{{1, 3, 0, 2}}, l2);
    p.add_instruction(op, l0, l3);
117
118
119
120
121
    auto prog = migraphx::parse_tf("conv_test.pb", true);

    EXPECT(p == prog);
}

122
123
124
125
126
127
128
129
130
131
TEST_CASE(identity_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 16, 16}});
    p.add_instruction(migraphx::op::identity{}, l0);
    auto prog = migraphx::parse_tf("identity_test.pb", false);

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
TEST_CASE(pack_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2}});
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {2}});
    auto l2 = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {2}});
    std::vector<migraphx::instruction_ref> args{l0, l1, l2};
    std::vector<migraphx::instruction_ref> unsqueezed_args;
    int64_t axis = 1;

    std::transform(args.begin(), args.end(), std::back_inserter(unsqueezed_args), 
            [&](migraphx::instruction_ref arg) { return p.add_instruction(migraphx::op::unsqueeze{{axis}}, arg); });
    p.add_instruction(migraphx::op::concat{static_cast<size_t>(axis)}, unsqueezed_args);
    auto prog = migraphx::parse_tf("pack_test.pb", false);

    EXPECT(p == prog);
}

150
151
152
TEST_CASE(pooling_test)
{
    migraphx::program p;
153
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 16, 16}});
154
155
156
157
    migraphx::op::pooling avg_pool_op{"average"};
    migraphx::op::pooling max_pool_op{"max"};
    avg_pool_op.padding_mode = migraphx::op::padding_mode_t::valid;
    max_pool_op.padding_mode = migraphx::op::padding_mode_t::valid;
Khalique's avatar
Khalique committed
158
159
160
161
    avg_pool_op.stride       = {2, 2};
    max_pool_op.stride       = {2, 2};
    avg_pool_op.lengths      = {2, 2};
    max_pool_op.lengths      = {2, 2};
162
163
    p.add_instruction(max_pool_op, l0);
    p.add_instruction(avg_pool_op, l0);
164
165
166
167
168
    auto prog = migraphx::parse_tf("pooling_test.pb", true);

    EXPECT(p == prog);
}

169
170
171
172
173
174
175
176
177
178
TEST_CASE(relu_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 16, 16}});
    p.add_instruction(migraphx::op::relu{}, l0);
    auto prog = migraphx::parse_tf("relu_test.pb", false);

    EXPECT(p == prog);
}

179
180
181
182
183
184
TEST_CASE(reshape_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {16}});
    migraphx::shape s0{migraphx::shape::int32_type, {4}};
    // in tf, the second arg is a literal that contains new dimensions
Khalique's avatar
Khalique committed
185
186
    p.add_literal(migraphx::literal{s0, {1, 1, 1, 16}});
    p.add_instruction(migraphx::op::reshape{{1, 1, 1, 16}}, l0);
187
188
189
190
191
192
193
194
    auto prog = migraphx::parse_tf("reshape_test.pb", false);

    EXPECT(p == prog);
}

TEST_CASE(softmax_test)
{
    migraphx::program p;
Khalique's avatar
Khalique committed
195
    auto l0   = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3}});
196
    auto dims = l0->get_shape().lens();
Khalique's avatar
Khalique committed
197
198
    auto r    = p.add_instruction(migraphx::op::reshape{{long(dims[0]), long(dims[1]), 1, 1}}, l0);
    auto s    = p.add_instruction(migraphx::op::softmax{}, r);
199
200
201
202
203
204
205
206
207
    p.add_instruction(migraphx::op::reshape{{long(dims[0]), long(dims[1])}}, s);
    auto prog = migraphx::parse_tf("softmax_test.pb", false);

    EXPECT(p == prog);
}

TEST_CASE(squeeze_test)
{
    migraphx::program p;
Khalique's avatar
Khalique committed
208
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 2, 3, 1}});
209
210
211
212
213
    p.add_instruction(migraphx::op::squeeze{{0, 3}}, l0);
    auto prog = migraphx::parse_tf("squeeze_test.pb", false);

    EXPECT(p == prog);
}
214
int main(int argc, const char* argv[]) { test::run(argc, argv); }