http://hihocoder.com/contest/tupu2018/problem/2

题目2 : ​Standard 2D Convolution

时间限制:5000ms
单点时限:1000ms
内存限制:256MB

描述

Implement such below standard convolution

conv2d(input tensor, filters = 8, kernel size=[5,5], stride = 2, zero padding = 'SAME', activation = relu)

The shape of input tensor:  [height = 32, width = 32, channels = 3]

输入

The first line will contain an image. The value of pixels is [0, 255]. The image should be preprocessed (/127.5 - 1) before fed into the convolution function. Weights[kernel height, kernel width, input channels, output channels] and biases[output channels] are followed in the next two lines respectively.

输出

Print the result tensor in one line printed in the same way as input file. The precision is (1E-4).

注意

All data are arranged into one line using C-like order, with the last axis index changing fastest, back to the first axis index changing slowest.

样例输入
Download the sample input from:
https://media.hihocoder.com/contests/tupu-campus-hiring-2017/conv_sample_input.txt 
样例输出
Download the sample output from:
https://media.hihocoder.com/contests/tupu-campus-hiring-2017/conv_sample_output.txt 

题意:实现conv2d()卷积函数。

卷积神经网络

#input channels = 3, output channels = 8

#input_tensor = 32 * 32 * 3

#weights = 5 * 5 * 3 * 8

#biases = 1*8

参数解释:stride是步长参数;zero padding表示是否用零填充边缘进行,same表示在stride = 1的时候输出矩阵大小不变; activation是激励函数;ReLU函数为f(x) = max(x, 0)。

 #include <iostream>
 #include <stdio.h>
 #include <cmath>
 #include <vector>
 #include <string>
 using namespace std;
 #define Height 32
 #define Width 32
 #define Channels 3
 #define Filters 8
 #define kernel 5
 #define Eps 1e-5
 float weight[kernel][kernel][Channels][Filters];
 float biases[Filters];
 , , , string padding = "SAME", string activation = "relu")
 {
     int feaMapH = ceil(Height * 1.0 / stride);
     ) * stride + kernelSize;
     ;
     int paddingR = (HeightAfterPadding - Height) - paddingL;
     vector<vector< vector<float> > >a;

     ;i < HeightAfterPadding;i++){
         vector< vector<float> >b;
         ; j < HeightAfterPadding;j++){
             vector<float>c;
             ;k < Channels;k++){
                 c.push_back();
             }
             b.push_back(c);
         }
         a.push_back(b);
     }
     //cout << HeightAfterPadding << endl;

     ;i < Height;i++){
         ; j < Width;j++){
             ;k < Channels;k++){
                 a[paddingL + i][paddingL + j][k] = ((float)(inputTensor[i][j][k])) / 127.5 - 1.0;
             }
         }
     }

     ;i <= HeightAfterPadding - kernelSize;i += stride){
         ; j <= HeightAfterPadding - kernelSize;j += stride){

             ;nn < filters;nn++){
                 ;
                 ;k < kernelSize;k++){
                     ;l < kernelSize;l++){
                         ;mm < Channels;mm++){
                             sum += a[i + k][j + l][mm] * weight[k][l][mm][nn];
                         }
                     }
                 }
                 sum += biases[nn];
                 if(sum < Eps) cout << "0.0000 " ;
                 else printf("%.4f ",sum);
             }
             //cout << endl;
         }
     }
     return ;
 }
 int main()
 {
     int a[Height][Width][Channels];
     //freopen("conv_sample_input.txt","r",stdin);
     ;i < Height;i++){
         ;j < Width;j++){
             ;k < Channels;k++){
                 cin >> a[i][j][k];
             }
         }
     }

     ;i < kernel;i++){
         ;j < kernel;j++){
             ;k < Channels;k++){
                 ;l < Filters;l++){
                     cin >> weight[i][j][k][l];
                 }
             }
         }
     }

     ;l < Filters;l++){
         cin >> biases[l];
     }
     conv2d(a,Filters,kernel);
     ;
 }

附:FFT矩阵卷积的快速乘法

Hihocoder之conv2d()的更多相关文章

  1. hihocoder -1121-二分图的判定

    hihocoder -1121-二分图的判定 1121 : 二分图一•二分图判定 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 大家好,我是小Hi和小Ho的小伙伴Net ...

  2. Hihocoder 太阁最新面经算法竞赛18

    Hihocoder 太阁最新面经算法竞赛18 source: https://hihocoder.com/contest/hihointerview27/problems 题目1 : Big Plus ...

  3. hihoCoder太阁最新面经算法竞赛15

    hihoCoder太阁最新面经算法竞赛15 Link: http://hihocoder.com/contest/hihointerview24 题目1 : Boarding Passes 时间限制: ...

  4. 【hihoCoder 1454】【hiho挑战赛25】【坑】Rikka with Tree II

    http://hihocoder.com/problemset/problem/1454 调了好长时间,谜之WA... 等我以后学好dp再来看为什么吧,先弃坑(╯‵□′)╯︵┻━┻ #include& ...

  5. 【hihocoder#1413】Rikka with String 后缀自动机 + 差分

    搞了一上午+接近一下午这个题,然后被屠了个稀烂,默默仰慕一晚上学会SAM的以及半天4道SAM的hxy大爷. 题目链接:http://hihocoder.com/problemset/problem/1 ...

  6. 【hihoCoder】1148:2月29日

    问题:http://hihocoder.com/problemset/problem/1148 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 思路: 1. 将问题转换成求两个日 ...

  7. 【hihoCoder】1288 : Font Size

    题目:http://hihocoder.com/problemset/problem/1288 手机屏幕大小为 W(宽) * H(长),一篇文章有N段,每段有ai个字,要求使得该文章占用的页数不超过P ...

  8. 【hihoCoder】1082: 然而沼跃鱼早就看穿了一切

      题目:http://hihocoder.com/problemset/problem/1082 输入一个字符串,将其中特定的单词替换成另一个单词   代码注意点: 1. getline(istre ...

  9. 【hihoCoder】1121:二分图一·二分图判定

      题目   http://hihocoder.com/problemset/problem/1121 无向图上有N个点,两两之间可以有连线,共有M条连线. 如果对所有点进行涂色(白/黑),判定是否存 ...

随机推荐

  1. ThreeJS实现波纹粒子效果

    今天我们来用ThreeJS的库实现一个波纹粒子效果,我们用到的ThreeJS的库有CanvasRenderer.js,OrbitControls.js,Projector.js,stats.min.j ...

  2. 如何推行Code Review

    这篇文章探讨的是如何在一个没有Code Review习惯的团队里面Code Review. 在进行Code Review的时候,审核人很多时候会对被审核人的代码指手画脚,在评价对方的代码,甚至是在批评 ...

  3. Netty 粘包/拆包应用案例及解决方案分析

    熟悉TCP变成的可以知道,无论是客户端还是服务端,但我们读取或者发送消息的时候,都需要考虑TCP底层粘包/拆包机制,下面我们先看一下TCP 粘包/拆包和基础知识,然后模拟一个没有考虑TCP粘包/拆包导 ...

  4. Python科学测量与计算库Pymeasure: 控制你的仪器进行自动测试和科学计算

    Python这种脚本语言因其语法简单,工具包丰富成熟,使用起来非常方便.在很多领域被广泛使用,今天介绍的是python在仪器控制应用领域,python在仪器控制领域相关的书籍可以参考<真实世界的 ...

  5. 简介几种系统调用函数:write、read、open、close、ioctl

    在 Linux 中,一切(或几乎一切)都是文件,因此,文件操作在 Linux 中是十分重要的,为此,Linux 系统直接提供了一些函数用于对文件和设备进行访问和控制,这些函数被称为系统调用(sysca ...

  6. 【异常检测】Isolation forest 的spark 分布式实现

    1.算法简介 算法的原始论文 http://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/icdm08b.pdf .python的sklearn中已经实现 ...

  7. 教你用Python解决非平衡数据问题(附代码)

    本文为你分享数据挖掘中常见的非平衡数据的处理,内容涉及到非平衡数据的解决方案和原理,以及如何使用Python这个强大的工具实现平衡的转换. 后台回复“不平衡”获取数据及代码~ 前言 好久没有更新自己写 ...

  8. java浮点数存储

    转自: [解惑]剖析float型的内存存储和精度丢失问题 1.小数的二进制表示问题 首先我们要搞清楚下面两个问题: (1)  十进制整数如何转化为二进制数 算法很简单.举个例子,11表示成二进制数: ...

  9. 【quickhybrid】如何实现一个Hybrid框架

    章节目录 [quickhybrid]如何实现一个跨平台Hybrid框架 [quick hybrid]架构一个Hybrid框架 [quick hybrid]H5和Native交互原理 [quick hy ...

  10. 作业MathExam

    MathExam233 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 600 650 • ...