60 LUCI_ASSERT(weights_shape.rank() == 2,
"Weights of FullyConnected should be 2");
61 LUCI_ASSERT(weights_shape.dim(0).known() && weights_shape.dim(1).known(),
62 "Weights of FullyConnected should be known")
88 out_shape.
rank(input_shape.rank());
89 for (uint32_t i = 0; i < input_shape.rank(); ++i)
90 out_shape.
dim(i) = input_shape.dim(i);
91 out_shape.
dim(out_shape.
rank() - 1) = weights_shape.dim(0);
95 bool is_dynamic_shape =
false;
97 for (uint32_t i = 0; i < input_shape.rank() - 1; i++)
99 if (not input_shape.dim(i).known())
101 is_dynamic_shape =
true;
106 uint32_t batch_size = 1;
108 for (uint32_t i = 0; i < input_shape.rank() - 1; i++)
110 batch_size *= input_shape.dim(i).
value();
114 if (is_dynamic_shape)
117 out_shape.
dim(0) = batch_size;
118 out_shape.
dim(1) = weights_shape.dim(0);