#include #include #include "tkdnn.h" #include "Network.h" #include "Layer.h" namespace tk { namespace dnn { Network::Network(dataDim_t input_dim) { this->input_dim = input_dim; float tk_ver = float(TKDNN_VERSION)/1000; float cu_ver = float(cudnnGetVersion())/1000; std::cout<<"New NETWORK (tkDNN v"<infer(dim, data); } checkCuda(cudaDeviceSynchronize()); return data; } bool Network::addLayer(Layer *l) { if(num_layers == MAX_LAYERS) return false; l->id = num_layers; layers[num_layers++] = l; return true; } dataDim_t Network::getOutputDim() { if(num_layers == 0) return input_dim; else return layers[num_layers-1]->output_dim; } void Network::adjustFeatureMapSizeWithShortcuts(){ layerType_t layer_type; int shortcutted_idx; for(int i=0; igetLayerType(); if(layer_type == LAYER_SHORTCUT){ shortcutted_idx = -1; for(int j=0; j(layers[i])->backLayer == layers[j]){ shortcutted_idx = j; break; } } if(shortcutted_idx == -1) FatalError("Problem when computing featuer_map_size with shortcuts"); for(int j=shortcutted_idx+1; jfeature_map_size += layers[shortcutted_idx]->output_dim.tot(); } } } void Network::print() { printCenteredTitle(" NETWORK MODEL ", '=', 60); std::cout.width(3); std::cout<input_dim; dataDim_t out = layers[i]->output_dim; tot_params += layers[i]->n_params; tot_MACC += layers[i]->MACC; if(layers[i]->feature_map_size> max_feature_map_size) max_feature_map_size = layers[i]->feature_map_size; std::cout.width(3); std::cout<getLayerName(); std::cout.width(4); std::cout< "; std::cout.width(4); std::cout<