asgn
 
Loading...
Searching...
No Matches
dcnnsol.hpp
1#ifndef dcnnsol_hpp_
2#define dcnnsol_hpp_
3
4#include "dcnncombined.hpp"
5
6namespace dcnnsol {
7
8 using dcnnasgn::permutation_policy_tag;
9
10 using dcnnasgn::kernel_height_selector;
11 using dcnnasgn::kernel_width_selector;
12 using dcnnasgn::channel_selector;
13 using dcnnasgn::batch_tag;
14 using dcnnasgn::height_selector;
15 using dcnnasgn::width_selector;
16 using dcnnasgn::conv_weight_policy;
17 using dcnnasgn::feature_weight_policy;
19 using dcnnasgn::nonstrided_conv_layer_base;
20 using dcnnasgn::strided_conv_layer_base;
21 using dcnnasgn::image_transformed_relu_layer_base;
22 using dcnnasgn::image_maxpool_layer_base;
23 using dcnnasgn::final_maxpool_layer_base;
24 using dcnnasgn::feature_conv_layer_base;
25 using dcnnasgn::feature_shift_layer_base;
26 using dcnnasgn::image_data_policy;
27 using dcnnasgn::feature_data_policy;
28 using dcnnasgn::feature_bias_policy;
29
30 using tagged::tag_list;
31 using tagged::co;
32 using tagged::tensor_class;
33
41
69
70
84
91 template< typename SP>
92 class image_data<SP, permutation_policy> {
93 public:
95 image_data(const batch_range& nr)
97 {}
102 };
103
113 template< typename CSP>
114 class feature_data< CSP, permutation_policy> {
115 public:
117 feature_data(const batch_range& nr) : values(policy::cr& nr) {}
122 };
123
132 template< typename KSP, typename CSPI, typename CSPO>
133 class conv_weights< KSP, CSPI, CSPO, permutation_policy> {
134 public:
140
141 conv_weights()
142 : weights(policy::khr& policy::kwr & ~policy::cir& policy::cor)
143 {}
144 };
145
153 template< typename CSPI, typename CSPO>
154 class feature_weights< CSPI, CSPO, permutation_policy> {
155 public:
161
162 feature_weights()
163 : weights(~policy::cir& policy::cor)
164 {
165 }
166 };
167
174 template< typename CSP>
175 class feature_bias< CSP, permutation_policy> {
176 public:
178 feature_bias() : betas(policy::cr) {}
179 policy::bias_t betas;
180 };
181
191
200 template< typename SPI, typename SPO, typename KSP>
201 struct nonstrided_conv_layer<SPI, SPO, KSP, permutation_policy>
202 : nonstrided_conv_layer_base< SPI, SPO, KSP, permutation_policy>
203 {
204 private:
206
207 using typename base_::input_data;
208 using typename base_::weights;
209 using typename base_::output_data;
210
211 using base_::hokrf;
212 using base_::hokimf;
213 using base_::wokrf;
214 using base_::wokimf;
215
216 using base_::hikrf;
217 using base_::hikomf;
218 using base_::wikrf;
219 using base_::wikomf;
220
221 using base_::hkorf;
222 using base_::hkoimf;
223 using base_::wkorf;
224 using base_::wkoimf;
225
226 using base_::hir;
227 using base_::wir;
228 using base_::cir;
229 using base_::khr;
230 using base_::kwr;
231 using base_::hor;
232 using base_::wor;
233 using base_::cor;
234
235 using base_::fanin;
236
238
239 public:
240 static void load_model(weights& wtd, const std::filesystem::path& data_folder, const std::string& fname)
241 {
242 auto&& weights = wtd.weights;
243
244 load_data_raw<dcnnasgn::image_conv_ftl>(weights, data_folder / (fname + ".bin"));
245 }
246
253 static void forward(const input_data& ind, const weights& wtd, output_data& outd)
254 {
255 auto br = forward_check(ind, wtd, outd);
256
257 auto&& inv = ind.values;
258 auto&& wtv = wtd.weights;
259 auto&& outv = outd.values;
260
261 for (auto x : outv.range())
262 {
263 outv[x] = 0.0f;
264 }
265
266 for (auto b : br)
267 {
268 auto&& outvb = outv[b];
269 auto&& invb = inv[b];
270
271 for (auto kh : khr)
272 {
273 auto hor2 = hkorf(kh);
274 auto hoid = hkoimf(kh);
275
276 for (auto kw : kwr)
277 {
278 auto wor2 = wkorf(kw);
279 auto woid = wkoimf(kw);
280
281 auto&& wtvk = wtv[kh & kw];
282
283 for (auto ho : hor2)
284 {
285 auto hi = hoid(ho);
286
287 auto&& outvbh = outvb[ho];
288 auto&& invbh = invb[hi];
289
290 for (auto wo : wor2)
291 {
292 auto wi = woid(wo);
293
294 auto&& outvbhw = outvbh[wo];
295 auto&& invbhw = invbh[wi];
296
297 for (auto ci : cir)
298 {
299 auto&& wtwki = wtvk[~ci];
300
301 float val_inv = invbhw[ci];
302 for (auto co : cor)
303 {
304 outvbhw[co] += wtwki[co] * val_inv;
305 }
306 }
307 }
308 }
309 }
310 }
311 }
312 }
313 };
314
323 template< typename SPI, typename SPO, typename KSP>
324 struct strided_conv_layer<SPI, SPO, KSP, permutation_policy>
325 : strided_conv_layer_base< SPI, SPO, KSP, permutation_policy>
326 {
327 private:
329
330 using typename base_::input_data;
331 using typename base_::weights;
332 using typename base_::output_data;
333
334 using base_::hokrf;
335 using base_::hokimf;
336 using base_::wokrf;
337 using base_::wokimf;
338
339 using base_::hikrf;
340 using base_::hikomf;
341 using base_::wikrf;
342 using base_::wikomf;
343
344 using base_::hkorf;
345 using base_::hkoimf;
346 using base_::wkorf;
347 using base_::wkoimf;
348
349 using base_::hir;
350 using base_::wir;
351 using base_::cir;
352 using base_::khr;
353 using base_::kwr;
354 using base_::hor;
355 using base_::wor;
356 using base_::cor;
357
358 using base_::fanin;
359
361
362 public:
363 static void load_model(weights& wtd, const std::filesystem::path& data_folder, const std::string& fname)
364 {
365 auto&& weights = wtd.weights;
366
367 load_data_raw<dcnnasgn::image_conv_ftl>(weights, data_folder / (fname + ".bin"));
368 }
369
376 static void forward(const input_data& ind, const weights& wtd, output_data& outd)
377 {
378 auto br = forward_check(ind, wtd, outd);
379
380 auto&& inv = ind.values;
381 auto&& wtv = wtd.weights;
382 auto&& outv = outd.values;
383
384 for (auto x : outv.range())
385 {
386 outv[x] = 0.0f;
387 }
388
389 for (auto b : br)
390 {
391 auto&& outvb = outv[b];
392 auto&& invb = inv[b];
393
394 for (auto kh : khr)
395 {
396 auto hor2 = hkorf(kh);
397 auto hoid = hkoimf(kh);
398
399 for (auto kw : kwr)
400 {
401 auto wor2 = wkorf(kw);
402 auto woid = wkoimf(kw);
403
404 auto&& wtvk = wtv[kh & kw];
405
406 for (auto ho : hor2)
407 {
408 auto hi = hoid(ho);
409
410 auto&& outvbh = outvb[ho];
411 auto&& invbh = invb[hi];
412
413 for (auto wo : wor2)
414 {
415 auto wi = woid(wo);
416
417 auto&& outvbhw = outvbh[wo];
418 auto&& invbhw = invbh[wi];
419
420 for (auto ci : cir)
421 {
422 auto&& wtwki = wtvk[~ci];
423
424 float val_inv = invbhw[ci];
425 for (auto co : cor)
426 {
427 outvbhw[co] += wtwki[co] * val_inv;
428 }
429 }
430 }
431 }
432 }
433 }
434 }
435 }
436 };
437
444 template< typename SP>
445 struct image_transformed_relu_layer< SP, permutation_policy>
446 : image_transformed_relu_layer_base<SP, permutation_policy>
447 {
448 private:
450
451 using typename self_::input_data;
452 using typename self_::model_data;
453 using typename self_::output_data;
454
455 using typename self_::channel_tag;
456
457 using self_::hr;
458 using self_::wr;
459 using self_::cr;
460
461 using self_::forward_check;
462
463 public:
464
465 static void load_model(model_data& md, const std::filesystem::path& data_folder, const std::string& fname_bias1, const std::string& fname_mean, const std::string& fname_var, const std::string& fname_weight, const std::string& fname_bias2)
466 {
470 tensor_class<float, channel_tag> multipliers(cr);
472
473 load_data_raw<dcnnasgn::feature_ftl>(betas1, data_folder / (fname_bias1 + ".bin"));
474 load_data_raw<dcnnasgn::feature_ftl>(Es, data_folder / (fname_mean + ".bin"));
475 load_data_raw<dcnnasgn::feature_ftl>(vars, data_folder / (fname_var + ".bin"));
476 load_data_raw<dcnnasgn::feature_ftl>(multipliers, data_folder / (fname_weight + ".bin"));
477 load_data_raw<dcnnasgn::feature_ftl>(betas2, data_folder / (fname_bias2 + ".bin"));
478
479 auto&& scalev = md.scales;
480 auto&& betav = md.betas;
481 for (auto c : cr)
482 {
483 auto beta1 = betas1[c];
484 auto E = Es[c];
485 auto var = vars[c];
486 auto multiplier = multipliers[c];
487 auto beta2 = betas2[c];
488 auto scale = multiplier / std::sqrt(var);
489 scalev[c] = scale;
490 betav[c] = scale * (beta1 - E) + beta2;
491 }
492 }
493
500 static void forward(const input_data& ind, const model_data& md, output_data& outd)
501 {
502 auto br = forward_check(ind, md, outd);
503
504 auto&& inv = ind.values;
505 auto&& scalev = md.scales;
506 auto&& betav = md.betas;
507 auto&& outv = outd.values;
508
509 forward_core(br, inv, scalev, betav, outv);
510 }
511
512 static void forward_core(auto br, auto&& inv, auto&& scalev, auto&& betav, auto&& outv)
513 {
514 for (auto b : br)
515 {
516 auto&& invb = inv[b];
517 auto&& outvb = outv[b];
518 for (auto h : hr)
519 {
520 auto&& invbh = invb[h];
521 auto&& outvbh = outvb[h];
522 for (auto w : wr)
523 {
524 auto&& invbhw = invbh[w];
525 auto&& outvbhw = outvbh[w];
526 for (auto c : cr)
527 {
528 auto val1 = invbhw[c] * scalev[c];
529 auto val2 = val1 + betav[c];
530 outvbhw[c] = std::max(0.0f, val2);
531 }
532 }
533 }
534 }
535 }
536 };
537
543 template< typename SPI, typename SPO>
544 struct image_maxpool_layer< SPI, SPO, permutation_policy>
545 : image_maxpool_layer_base<SPI, SPO, permutation_policy>
546 {
547 private:
549
550 using typename base_::input_data;
551 using typename base_::output_data;
552
553 using typename base_::height_out_tag;
554 using typename base_::width_out_tag;
555 using typename base_::channel_tag;
556
557 using base_::hir;
558 using base_::wir;
559 using base_::cr;
560
561 using base_::khr;
562 using base_::kwr;
563
564 using base_::hor;
565 using base_::wor;
566
567 using base_::hkoimf;
568 using base_::wkoimf;
569
570 using base_::forward_check;
571 public:
577 static void forward(const input_data& ind, output_data& outd)
578 {
579 auto br = forward_check(ind, outd);
580
581 auto&& inv = ind.values;
582 auto&& outv = outd.values;
583
584 for (auto b : br)
585 {
586 auto&& outvb = outv[b];
587 for (auto ho : hor)
588 {
589 auto&& outvbh = outvb[ho];
590 for (auto wo : wor)
591 {
592 auto&& outvbhw = outvbh[wo];
593 for (auto c : cr)
594 {
595 outvbhw[c] = -std::numeric_limits<float>::infinity();
596 }
597 }
598 }
599 }
600
601 for (auto b : br)
602 {
603 auto&& invb = inv[b];
604 auto&& outvb = outv[b];
605 for (auto kh : khr)
606 {
607 auto hoid = hkoimf(kh);
608 for (auto kw : kwr)
609 {
610 auto woid = wkoimf(kw);
611 for (auto ho : hor)
612 {
613 auto&& outvbh = outvb[ho];
614 auto hi = hoid(ho);
615 auto&& invbh = invb[hi];
616 for (auto wo : wor)
617 {
618 auto&& outvbhw = outvbh[wo];
619 auto wi = woid(wo);
620 auto&& invbhw = invbh[wi];
621 for (auto c : cr)
622 {
623 outvbhw[c] = std::max(outvbhw[c], invbhw[c]);
624 }
625 }
626 }
627 }
628 }
629 }
630 }
631 };
632
638 template< typename SPI, typename CSPO>
639 struct final_maxpool_layer< SPI, CSPO, permutation_policy>
640 : final_maxpool_layer_base<SPI, CSPO, permutation_policy>
641 {
642 private:
644
645 using typename base_::input_data;
646 using typename base_::output_data;
647
648 using typename base_::height_in_tag;
649 using typename base_::width_in_tag;
650 using typename base_::channel_tag;
651
652 using base_::hir;
653 using base_::wir;
654 using base_::cr;
655
657 public:
663 static void forward(const input_data& ind, output_data& outd)
664 {
665 auto br = forward_check(ind, outd);
666
667 auto&& inv = ind.values;
668 auto&& outv = outd.values;
669
670 for (auto b : br)
671 {
672 auto&& outvb = outv[b];
673 for (auto c : cr)
674 {
675 outvb[c] = -std::numeric_limits<float>::infinity();
676 }
677 }
678
679 for (auto b : br)
680 {
681 auto&& invb = inv[b];
682 auto&& outvb = outv[b];
683 for (auto hi : hir)
684 {
685 auto&& invbh = invb[hi];
686 for (auto wi : wir)
687 {
688 auto&& invbhw = invbh[wi];
689 for (auto c : cr)
690 {
691 outvb[c] = std::max(outvb[c], invbhw[c]);
692 }
693 }
694 }
695 }
696 }
697 };
698
707 template< typename CSPI, typename CSPO>
708 struct feature_conv_layer< CSPI, CSPO, permutation_policy>
709 : feature_conv_layer_base< CSPI, CSPO, permutation_policy>
710 {
711 private:
713
714 using typename base_::input_data;
715 using typename base_::weights;
716 using typename base_::output_data;
717
718 using base_::cir;
719 using base_::cor;
720
722
723 using base_::fanin;
724 public:
725
726 static void load_model(weights& wtd, const std::filesystem::path& data_folder, const std::string& fname)
727 {
728 auto&& weights = wtd.weights;
729
730 load_data_raw<dcnnasgn::feature_conv_ftl>(weights, data_folder / (fname + ".bin"));
731 }
732
739 static void forward(const input_data& ind, const weights& wtd, output_data& outd)
740 {
741 auto br = forward_check(ind, wtd, outd);
742
743 auto&& inv = ind.values;
744 auto&& wtv = wtd.weights;
745 auto&& outv = outd.values;
746
747 for (auto co : cor)
748 {
749 for (auto b : br)
750 {
751 outv[co & b] = 0.0f;
752 }
753 }
754
755 for (auto ci : cir)
756 {
757 for (auto co : cor)
758 {
759 auto wt = wtv[~ci & co];
760 for (auto b : br)
761 {
762 outv[co & b] += wt * inv[ci & b];
763 }
764 }
765 }
766 }
767 };
768
775 template< typename CSP>
776 struct feature_shift_layer< CSP, permutation_policy>
777 : feature_shift_layer_base< CSP, permutation_policy>
778 {
779 private:
781
782 using typename base_::input_data;
783 using typename base_::bias_data;
784 using typename base_::output_data;
785
786 using base_::cr;
787
788 using base_::forward_check;
789 public:
790
791 static void load_model(bias_data& cd, const std::filesystem::path& data_folder, const std::string& fname)
792 {
793 load_data_raw<dcnnasgn::feature_ftl>(cd.betas, data_folder / (fname + ".bin"));
794 }
795
802 static void forward(const input_data& ind, const bias_data& cd, output_data& outd)
803 {
804 auto br = forward_check(ind, cd, outd);
805
806 auto&& inv = ind.values;
807 auto&& betav = cd.betas;
808 auto&& outv = outd.values;
809
810 for (auto c : cr)
811 {
812 auto beta = betav[c];
813 for (auto b : br)
814 {
815 outv[c & b] = inv[c & b] + beta;
816 }
817 }
818 }
819 };
820
822
826
830 template< typename CSPI, typename CSPO, typename KSP>
831 class complete_cnn_model< CSPI, CSPO, KSP, permutation_policy> {
832 public:
833 using model_c = dcnnsol::conv_weights< KSP, CSPI, CSPO, permutation_policy>;
834 using model_r = dcnnasgn::image_transformed_relu_model< CSPO>;
835
836 model_c c;
837 model_r r;
838 };
839
843 template< typename SPI, typename SPO>
844 struct complete_cnn_internal< SPI, SPO, permutation_policy> {
845 private:
846 using CSPI = typename SPI::channel_policy;
847 using CSPO = typename SPO::channel_policy;
848 public:
849 using data_c = dcnnsol::image_data< SPO, permutation_policy>;
850
851 data_c c;
852
853 complete_cnn_internal(const batch_range& nr)
854 : c(nr)
855 {
856 }
857 };
858
864 template< typename SPI, typename SPO, typename KSP>
865 struct complete_cnn_layer< SPI, SPO, KSP, permutation_policy> {
866 public:
867 using CSPI = typename SPI::channel_policy;
868 using CSPO = typename SPO::channel_policy;
869
870 static constexpr bool nonstrided = tagged::same_tag< typename SPI::height_tag, typename SPO::height_tag>
871 && tagged::same_tag< typename SPI::width_tag, typename SPO::width_tag>;
872
873 using layer_c = std::conditional_t< nonstrided,
874 dcnnsol::nonstrided_conv_layer< SPI, SPO, KSP, permutation_policy>,
875 dcnnsol::strided_conv_layer< SPI, SPO, KSP, permutation_policy>>;
876 using layer_r = dcnnsol::image_transformed_relu_layer< SPO, permutation_policy>;
877
878 using internal_data = complete_cnn_internal< SPI, SPO, permutation_policy>;
879
880 using input_data = dcnnsol::image_data< SPI, permutation_policy>;
881 using model = complete_cnn_model< CSPI, CSPO, KSP, permutation_policy>;
882 using output_data = dcnnsol::image_data< SPO, permutation_policy>;
883
884 static void load_model(model& md, const std::filesystem::path& data_folder, int feature_number)
885 {
886 auto conv_name = "features." + std::to_string(feature_number);
887 auto norm_name = "features." + std::to_string(feature_number + 1);
888
889 layer_c::load_model(md.c, data_folder, conv_name + ".weight");
890 layer_r::load_model(md.r, data_folder, conv_name + ".bias", norm_name + ".running_mean", norm_name + ".running_var", norm_name + ".weight", norm_name + ".bias");
891 }
892
893 static void forward(const input_data& ind, const model& md, internal_data& td, output_data& outd)
894 {
895 layer_c::forward(ind, md.c, td.c);
896 layer_r::forward(td.c, md.r, outd);
897 }
898
900 static std::size_t forward_complexity(const batch_range& br)
901 {
902 std::size_t s = 0;
903 s += layer_c::forward_complexity(br);
904 s += layer_r::forward_complexity(br);
905 return s;
906 }
908 };
909
911
912}
913
914#endif
policy::weights_t weights
Convolution or Aggregate layer weights.
Definition dcnnsol.hpp:139
policy::values_t values
Activation signals for all images in a minibatch.
Definition dcnnsol.hpp:121
policy::weights_t weights
Convolution or Aggregate layer weights.
Definition dcnnsol.hpp:160
policy::values_t values
Activation signals for all images in a minibatch.
Definition dcnnsol.hpp:101
A tensor - a multi-dimensional tagged generalization of vector/matrix.
Definition tagged.hpp:1617
tagged::range_class< batch_tag > batch_range
The range of images within a minibatch.
Definition dcnnelements.hpp:91
retag< typename impl::co_traits< selector< T > >::co, T > co
Provide a co-tag for a given tag.
Definition tagged.hpp:1911
Tag: Channel dimension.
Definition dcnnelements.hpp:157
Policy class: Model weight data types for convolutional layers.
Definition dcnnelements.hpp:698
tagged::permute_tensor_class< typename PP::weights, float, kernel_height_tag, kernel_width_tag, tagged::co< channel_in_tag >, channel_out_tag > weights_t
The tensor containing the weights of the convolution.
Definition dcnnelements.hpp:723
Definition dcnnelements.hpp:1392
Utility base class for the fully connected layer.
Definition dcnnelements.hpp:1647
dcnnsol::feature_weights< CSPI, CSPO, PP > weights
Model weights.
Definition dcnnelements.hpp:1659
static constexpr std::size_t fanin
Number of inputs for each output element.
Definition dcnnelements.hpp:1687
static constexpr auto cor
Output feature channel range.
Definition dcnnelements.hpp:1683
dcnnsol::feature_data< CSPI, PP > input_data
Input activations.
Definition dcnnelements.hpp:1655
static constexpr auto cir
Input feature channel range.
Definition dcnnelements.hpp:1682
static tagged::range_class< batch_tag > forward_check(const input_data &ind, const weights &wtd, output_data &outd)
Check argument compatibility for the forward function.
Definition dcnnelements.hpp:1699
dcnnsol::feature_data< CSPO, PP > output_data
Output activations.
Definition dcnnelements.hpp:1663
Final layer activation data policy.
Definition dcnnelements.hpp:388
static constexpr auto cr
Channel index range, statically sized.
Definition dcnnelements.hpp:394
tagged::permute_tensor_class< typename PP::feature_data, float, channel_tag, batch_tag > values_t
2-dimensional tensor type carrying activations
Definition dcnnelements.hpp:401
Definition dcnnelements.hpp:1732
Policy class: Model weight data types for fully connected layers.
Definition dcnnelements.hpp:736
tagged::permute_tensor_class< typename PP::feature_weights, float, tagged::co< channel_in_tag >, channel_out_tag > weights_t
The tensor containing the weights of the convolution.
Definition dcnnelements.hpp:759
Definition dcnnelements.hpp:1510
static constexpr auto cr
Input image channel range.
Definition dcnnelements.hpp:1547
dcnnsol::feature_data< CSPO, PP > output_data
Output activations.
Definition dcnnelements.hpp:1526
static tagged::range_class< batch_tag > forward_check(const input_data &ind, output_data &outd)
Check argument compatibility for the forward function.
Definition dcnnelements.hpp:1563
typename SPI::width_tag width_in_tag
Input image width.
Definition dcnnelements.hpp:1534
typename SPI::height_tag height_in_tag
Input image height.
Definition dcnnelements.hpp:1533
static constexpr auto hir
Input image height range.
Definition dcnnelements.hpp:1545
typename SPI::channel_tag channel_tag
Input image channel.
Definition dcnnelements.hpp:1535
static constexpr auto wir
Input image width range.
Definition dcnnelements.hpp:1546
dcnnsol::image_data< SPI, PP > input_data
Input activations.
Definition dcnnelements.hpp:1522
Internal layer activation data policy.
Definition dcnnelements.hpp:339
tagged::permute_tensor_class< typename PP::data, float, height_tag, width_tag, channel_tag, batch_tag > values_t
4-dimensional tensor type carrying activations
Definition dcnnelements.hpp:371
static constexpr auto cr
Channel index range, statically sized.
Definition dcnnelements.hpp:364
static constexpr auto hr
Image height range, statically sized.
Definition dcnnelements.hpp:356
static constexpr auto wr
Image width range, statically sized.
Definition dcnnelements.hpp:360
Definition dcnnelements.hpp:1440
Utility base class for a transformed ReLU layer.
Definition dcnnelements.hpp:1314
static constexpr auto wr
Index range along image width.
Definition dcnnelements.hpp:1345
typename SP::channel_tag channel_tag
Tag: Channel index.
Definition dcnnelements.hpp:1342
image_transformed_relu_model< CSP > model_data
Statistics.
Definition dcnnelements.hpp:1325
static constexpr auto cr
Index range along image channels.
Definition dcnnelements.hpp:1346
static constexpr auto hr
Index range along image height.
Definition dcnnelements.hpp:1344
dcnnsol::image_data< SP, PP > output_data
Output activations.
Definition dcnnelements.hpp:1329
dcnnsol::image_data< SP, PP > input_data
Input activations.
Definition dcnnelements.hpp:1321
Utility base class for the convolutional layer.
Definition dcnnelements.hpp:935
static constexpr conv_iko_map_functor< tagged::selector< height_in_tag >, tagged::selector< kernel_height_tag >, tagged::selector< height_out_tag >, khr.size(), 1 > hikomf
input-height index to kernel-height index to output-height index
Definition dcnnelements.hpp:1030
static constexpr conv_ok_range_functor< tagged::selector< kernel_height_tag >, tagged::selector< height_out_tag >, hir.size(), khr.size(), 1 > hokrf
output-height index to kernel-height range
Definition dcnnelements.hpp:1024
dcnnsol::image_data< SPI, PP > input_data
Input activations.
Definition dcnnelements.hpp:946
static constexpr auto cor
Output image channel range.
Definition dcnnelements.hpp:989
static constexpr auto hir
Input image height range.
Definition dcnnelements.hpp:982
static constexpr auto wir
Input image width range.
Definition dcnnelements.hpp:983
static constexpr conv_koi_map_functor< tagged::selector< kernel_width_tag >, tagged::selector< width_out_tag >, tagged::selector< width_in_tag >, kwr.size(), 1 > wkoimf
kernel-width index to output-width index to input-width index
Definition dcnnelements.hpp:1037
static constexpr conv_koi_map_functor< tagged::selector< kernel_height_tag >, tagged::selector< height_out_tag >, tagged::selector< height_in_tag >, khr.size(), 1 > hkoimf
kernel-height index to output-height index to input-height index
Definition dcnnelements.hpp:1035
static constexpr auto cir
Input image channel range.
Definition dcnnelements.hpp:984
static constexpr auto khr
Kernel height range.
Definition dcnnelements.hpp:985
dcnnsol::image_data< SPO, PP > output_data
Output activations.
Definition dcnnelements.hpp:954
static tagged::range_class< batch_tag > forward_check(const input_data &ind, const weights &wtd, output_data &outd)
Check argument compatibility for the forward function.
Definition dcnnelements.hpp:1051
static constexpr conv_ko_range_functor< tagged::selector< kernel_height_tag >, tagged::selector< height_out_tag >, hir.size(), khr.size(), 1 > hkorf
kernel-height index to output-height range
Definition dcnnelements.hpp:1034
static constexpr conv_oki_map_functor< tagged::selector< width_in_tag >, tagged::selector< kernel_width_tag >, tagged::selector< width_out_tag >, kwr.size(), 1 > wokimf
output-width index to kernel-width index to input-width index
Definition dcnnelements.hpp:1027
static constexpr conv_ik_range_functor< tagged::selector< width_in_tag >, tagged::selector< kernel_width_tag >, wir.size(), kwr.size(), 1 > wikrf
input-width index to kernel-width range
Definition dcnnelements.hpp:1031
static constexpr conv_ko_range_functor< tagged::selector< kernel_width_tag >, tagged::selector< width_out_tag >, wir.size(), kwr.size(), 1 > wkorf
kernel-width index to output-width range
Definition dcnnelements.hpp:1036
static constexpr conv_oki_map_functor< tagged::selector< height_in_tag >, tagged::selector< kernel_height_tag >, tagged::selector< height_out_tag >, khr.size(), 1 > hokimf
output-height index to kernel-height index to input-height index
Definition dcnnelements.hpp:1025
static constexpr auto kwr
Kernel width range.
Definition dcnnelements.hpp:986
static constexpr conv_iko_map_functor< tagged::selector< width_in_tag >, tagged::selector< kernel_width_tag >, tagged::selector< width_out_tag >, kwr.size(), 1 > wikomf
input-width index to kernel-width index to output-width index
Definition dcnnelements.hpp:1032
static constexpr std::size_t fanin
Number of inputs for each output element.
Definition dcnnelements.hpp:993
dcnnsol::conv_weights< KSP, CSPI, CSPO, PP > weights
Model weights.
Definition dcnnelements.hpp:950
static constexpr conv_ok_range_functor< tagged::selector< kernel_width_tag >, tagged::selector< width_out_tag >, wir.size(), kwr.size(), 1 > wokrf
output-width index to kernel-width range
Definition dcnnelements.hpp:1026
static constexpr auto hor
Output image height range.
Definition dcnnelements.hpp:987
static constexpr conv_ik_range_functor< tagged::selector< height_in_tag >, tagged::selector< kernel_height_tag >, hir.size(), khr.size(), 1 > hikrf
input-height index to kernel-height range
Definition dcnnelements.hpp:1029
static constexpr auto wor
Output image width range.
Definition dcnnelements.hpp:988
Utility base class for the convolutional layer.
Definition dcnnelements.hpp:1099
static constexpr conv_iko_map_functor< tagged::selector< width_in_tag >, tagged::selector< kernel_width_tag >, tagged::selector< width_out_tag >, kwr.size(), WSTRIDE > wikomf
input-width index to kernel-width index to output-width index
Definition dcnnelements.hpp:1206
static tagged::range_class< batch_tag > forward_check(const input_data &ind, const weights &wtd, output_data &outd)
Check argument compatibility for the forward function.
Definition dcnnelements.hpp:1225
static constexpr conv_oki_map_functor< tagged::selector< height_in_tag >, tagged::selector< kernel_height_tag >, tagged::selector< height_out_tag >, khr.size(), HSTRIDE > hokimf
output-height index to kernel-height index to input-height index
Definition dcnnelements.hpp:1199
dcnnsol::image_data< SPI, PP > input_data
Input activations.
Definition dcnnelements.hpp:1110
static constexpr auto wor
Output image width range.
Definition dcnnelements.hpp:1149
static constexpr conv_oki_map_functor< tagged::selector< width_in_tag >, tagged::selector< kernel_width_tag >, tagged::selector< width_out_tag >, kwr.size(), WSTRIDE > wokimf
output-width index to kernel-width index to input-width index
Definition dcnnelements.hpp:1201
static constexpr conv_koi_map_functor< tagged::selector< kernel_height_tag >, tagged::selector< height_out_tag >, tagged::selector< height_in_tag >, khr.size(), HSTRIDE > hkoimf
kernel-height index to output-height index to input-height index
Definition dcnnelements.hpp:1209
static constexpr conv_ko_range_functor< tagged::selector< kernel_width_tag >, tagged::selector< width_out_tag >, wir.size(), kwr.size(), WSTRIDE > wkorf
kernel-width index to output-width range
Definition dcnnelements.hpp:1210
static constexpr conv_ik_range_functor< tagged::selector< height_in_tag >, tagged::selector< kernel_height_tag >, hir.size(), khr.size(), HSTRIDE > hikrf
input-height index to kernel-height range
Definition dcnnelements.hpp:1203
static constexpr auto hor
Output image height range.
Definition dcnnelements.hpp:1148
dcnnsol::image_data< SPO, PP > output_data
Output activations.
Definition dcnnelements.hpp:1118
static constexpr auto wir
Input image width range.
Definition dcnnelements.hpp:1144
static constexpr auto hir
Input image height range.
Definition dcnnelements.hpp:1143
static constexpr conv_ko_range_functor< tagged::selector< kernel_height_tag >, tagged::selector< height_out_tag >, hir.size(), khr.size(), HSTRIDE > hkorf
kernel-height index to output-height range
Definition dcnnelements.hpp:1208
static constexpr auto kwr
Kernel width range.
Definition dcnnelements.hpp:1147
static constexpr auto khr
Kernel height range.
Definition dcnnelements.hpp:1146
static constexpr auto cor
Output image channel range.
Definition dcnnelements.hpp:1150
static constexpr conv_koi_map_functor< tagged::selector< kernel_width_tag >, tagged::selector< width_out_tag >, tagged::selector< width_in_tag >, kwr.size(), WSTRIDE > wkoimf
kernel-width index to output-width index to input-width index
Definition dcnnelements.hpp:1211
static constexpr auto cir
Input image channel range.
Definition dcnnelements.hpp:1145
static constexpr conv_ik_range_functor< tagged::selector< width_in_tag >, tagged::selector< kernel_width_tag >, wir.size(), kwr.size(), WSTRIDE > wikrf
input-width index to kernel-width range
Definition dcnnelements.hpp:1205
static constexpr conv_ok_range_functor< tagged::selector< kernel_height_tag >, tagged::selector< height_out_tag >, hir.size(), khr.size(), HSTRIDE > hokrf
output-height index to kernel-height range
Definition dcnnelements.hpp:1198
dcnnsol::conv_weights< KSP, CSPI, CSPO, PP > weights
Model weights.
Definition dcnnelements.hpp:1114
static constexpr conv_iko_map_functor< tagged::selector< height_in_tag >, tagged::selector< kernel_height_tag >, tagged::selector< height_out_tag >, khr.size(), HSTRIDE > hikomf
input-height index to kernel-height index to output-height index
Definition dcnnelements.hpp:1204
static constexpr std::size_t fanin
Number of inputs for each output element.
Definition dcnnelements.hpp:1154
static constexpr conv_ok_range_functor< tagged::selector< kernel_width_tag >, tagged::selector< width_out_tag >, wir.size(), kwr.size(), WSTRIDE > wokrf
output-width index to kernel-width range
Definition dcnnelements.hpp:1200
static void forward(const input_data &ind, const weights &wtd, output_data &outd)
The forward-propagation function of an aggregate layer.
Definition dcnnsol.hpp:739
static void forward(const input_data &ind, const bias_data &cd, output_data &outd)
The forward-propagation function of a linear layer.
Definition dcnnsol.hpp:802
static void forward(const input_data &ind, output_data &outd)
The forward-propagation function of a MaxPool layer.
Definition dcnnsol.hpp:663
static void forward(const input_data &ind, output_data &outd)
The forward-propagation function of a MaxPool layer.
Definition dcnnsol.hpp:577
static void forward(const input_data &ind, const model_data &md, output_data &outd)
The forward-propagation function of a normalizing layer.
Definition dcnnsol.hpp:500
static void forward(const input_data &ind, const weights &wtd, output_data &outd)
The forward-propagation function of a convolutional layer.
Definition dcnnsol.hpp:253
Policy class defining the layout of all major data.
Definition dcnnsol.hpp:48
tagged::tag_list< batch_tag, channel_selector > feature_data
The index order for activation signals (feature_data::values) generated by the Aggregate layer.
Definition dcnnsol.hpp:67
tagged::tag_list< tagged::co< channel_selector >, channel_selector > feature_weights
The index order for fully connected layer weights (conv_weights::weights)
Definition dcnnsol.hpp:58
tagged::tag_list< kernel_height_selector, kernel_width_selector, tagged::co< channel_selector >, channel_selector > weights
The index order for Convolution and Aggregate layer weights (conv_weights::weights)
Definition dcnnsol.hpp:53
tagged::tag_list< batch_tag, height_selector, width_selector, channel_selector > data
The index order for forward activation signals (image_data::values) between all layers except the fir...
Definition dcnnsol.hpp:63
static void forward(const input_data &ind, const weights &wtd, output_data &outd)
The forward-propagation function of a convolutional layer.
Definition dcnnsol.hpp:376
A wrapped list of tags.
Definition tagged.hpp:228