#include #include #include "dl_lib_matrix3d.h" #define HEIGHT 4 #define WIDHT 4 const static fptp_t Conv3D_bias_item_array[] = { 0.0f, 0.0f }; const static dl_matrix3d_t Conv3D_bias = { .w = 1, .h = 1, .c = 2, .n = 1, .stride = 2, .item = (fptp_t *)(&Conv3D_bias_item_array[0]) }; const static fptp_t Conv3D_kernel_item_array[] = { 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; const static dl_matrix3d_t Conv3D_kernel = { .w = 3, .h = 3, .c = 1, .n = 2, .stride = 6, .item = (fptp_t *)(&Conv3D_kernel_item_array[0]) }; void printData(dl_matrix3d_t); void app_main() { dl_matrix3d_t *input = dl_matrix3d_alloc(1, HEIGHT, WIDHT, 1); float inputData[] = { 1.0f, 1.0f, 1.0f, 0.0f, \ 0.0f, 1.0f, 1.0f, 1.0f, \ 0.0f, 0.0f, 1.0f, 1.0f, \ 0.0f, 0.0f, 1.0f, 1.0f }; input->item = inputData; puts("Input Data"); printData(*input); puts("Conv3d Kernel"); printData(Conv3D_kernel); puts("Conv3d Bias"); printData(Conv3D_bias); dl_matrix3d_t *Conv3D_1 = dl_matrix3dff_conv_common(input, &Conv3D_kernel, &Conv3D_bias, 1, 1, PADDING_VALID); dl_matrix3d_t *Conv3D_2 = dl_matrix3dff_conv_3x3(input, &Conv3D_kernel, &Conv3D_bias, 1, 1, PADDING_VALID); puts("dl_matrix3dff_conv_common"); printData(*Conv3D_1); puts("dl_matrix3dff_conv_3x3"); printData(*Conv3D_2); } void printData(dl_matrix3d_t data) { int n = data.n; int w = data.w; int h = data.h; int c = data.c; for (int b = 0; b < n; ++b) { printf("n = %d\n", b); for (int k = 0; k < c; ++k) { printf("c = %d\n", k); for (int j = 0; j < w; ++j) { for (int i =0; i < h; ++i) printf("%.1f\t", data.item[b * w * h * c + j * h * c + i * c + k]); puts(" "); } } puts(" "); } puts(" "); }