通信系统仿真

崔春雷

目录

  • 1 第一单元: MATLAB基础
    • 1.1 课程说明与资料
      • 1.1.1 作业参考答案
      • 1.1.2 移动22级作业答案
    • 1.2 MATLAB安装与运行环境
      • 1.2.1 MATLAB介绍
    • 1.3 基本数据类型:数值类型
    • 1.4 基本数据类型:字符类型
    • 1.5 数据类型转换与输出
    • 1.6 数组与矩阵基础
      • 1.6.1 矩阵运算进阶
    • 1.7 数组与矩阵常用函数
    • 1.8 matlab中的逻辑运算
    • 1.9 实验: MATLAB常用数学函数
      • 1.9.1 实验 作业答案
    • 1.10 元胞数组
    • 1.11 结构体数组
      • 1.11.1 结构体进阶
      • 1.11.2 元胞数组与结构体数组对比
      • 1.11.3 map 容器
    • 1.12 附录:MATLAB常用基础命令
    • 1.13 拓展内容:实时脚本
      • 1.13.1 实时脚本示例
    • 1.14 课程作业与答案
      • 1.14.1 《通信系统仿真》期末考试
  • 2 第二单元:Matlab 程序设计
    • 2.1 顺序结构程序
    • 2.2 分支结构—— if语句
    • 2.3 分支结构—— switch语句
    • 2.4 循环结构—— while语句
    • 2.5 循环结构—— for语句
    • 2.6 图像处理基础
    • 2.7 Matlab的函数
      • 2.7.1 函数内容的课外扩展
    • 2.8 本章实验:for循环的应用
      • 2.8.1 素数问题
        • 2.8.1.1 素数的螺旋线排列
      • 2.8.2 3X+1猜想
      • 2.8.3 7 行代码计算 π
    • 2.9 排序算法
      • 2.9.1 冒泡排序
      • 2.9.2 选择排序
      • 2.9.3 插入排序
      • 2.9.4 快速排序
      • 2.9.5 基数排序
      • 2.9.6 计数排序
      • 2.9.7 堆排序
    • 2.10 动态规划算法
      • 2.10.1 动态规划编程实例
      • 2.10.2 动态规划:01背包问题
      • 2.10.3 动态规划常见题目分析
      • 2.10.4 动态规划题目分析2
    • 2.11 常用算法简介
      • 2.11.1 剪枝算法
      • 2.11.2 二分查找
      • 2.11.3 递归算法
      • 2.11.4 回溯算法
        • 2.11.4.1 Leetcode回溯题目合集
        • 2.11.4.2 回溯算法总结
        • 2.11.4.3 回溯法解数独问题
        • 2.11.4.4 DFS与BFS
          • 2.11.4.4.1 DFS/BFS原理
          • 2.11.4.4.2 BFS的应用:Dijkstra算法
      • 2.11.5 n 皇后问题专题
      • 2.11.6 双指针算法
      • 2.11.7 数组模拟链表(约瑟夫环)
      • 2.11.8 Hash(哈希表)
      • 2.11.9 图论与路径规划
        • 2.11.9.1 迪杰斯特拉算法
        • 2.11.9.2 A*算法
          • 2.11.9.2.1 A*算法的MATLAB实现
        • 2.11.9.3 RRT路径规划算法
          • 2.11.9.3.1 RRT算法 MATLAB代码
          • 2.11.9.3.2 参考资料
      • 2.11.10 数据结构
        • 2.11.10.1 数据结构例题
      • 2.11.11 前缀和 差分 双指针
      • 2.11.12 位运算
      • 2.11.13 常用算法代码模板
    • 2.12 练习题库
    • 2.13 code
      • 2.13.1 简易计算器gui代码
      • 2.13.2 五子棋
      • 2.13.3 连连看小游戏
      • 2.13.4 递归算法与汉诺塔
      • 2.13.5 有理数的小数循环节
    • 2.14 MATLAB编程风格
      • 2.14.1 向量化编程专题
  • 3 第三单元:Matlab 图形图像处理
    • 3.1 二维图形绘图基础
    • 3.2 二维图形绘图进阶
    • 3.3 三维图形绘图
      • 3.3.1 MATLAB绘图小结
        • 3.3.1.1 用matlab绘制好看图像
    • 3.4 MATLAB高级绘图
    • 3.5 文件操作
    • 3.6 Matlab图像处理进阶
      • 3.6.1 补充:Matlab图像处理常用函数
      • 3.6.2 RGB/HSV/HSI颜色模型
      • 3.6.3 图片切换动画效果
      • 3.6.4 图像连通域标记
      • 3.6.5 图像旋转与插值
      • 3.6.6 图像的形态学
      • 3.6.7 空间滤波
        • 3.6.7.1 图像中常见的噪声类型与滤波方法
        • 3.6.7.2 matlab中的滤波函数
        • 3.6.7.3 BM3D 去噪算法
        • 3.6.7.4 双边滤波
      • 3.6.8 图像的频域处理
    • 3.7 本章总结
    • 3.8 实验 : matlab 绘图练习1
    • 3.9 实验: matlab 绘图练习2
    • 3.10 实验 :数学函数图像绘制
    • 3.11 实验:绘图综合练习
    • 3.12 实验:曲线拟合
    • 3.13 实验:牛顿法求解方程的根
    • 3.14 实验:信号的傅里叶变换
      • 3.14.1 傅里叶变换、小波变换、希尔伯特变换
      • 3.14.2 新建目录
    • 3.15 课外补充:图像处理基础1
    • 3.16 课外补充:图像处理基础2
    • 3.17 课外补充:图像处理基础3
    • 3.18 课外补充:PYTHON基础
  • 4 第五单元:MATLAB通信仿真
    • 4.1 现代通信系统的介绍
    • 4.2 模拟通信系统的仿真原理
    • 4.3 HDB3编解码的仿真实现
    • 4.4 SIMULINK和其模块简介
    • 4.5 数字通信系统的仿真原理
    • 4.6 模拟通信系统Simulink仿真
    • 4.7 数字通信系统Simulink仿真
    • 4.8 音频信号测处理与仿真
    • 4.9 图像数字水印技术
      • 4.9.1 三角函数到傅里叶变换再到语音识别与数字水印
    • 4.10 信息系统与算法
      • 4.10.1 递归算法
        • 4.10.1.1 递归与堆栈的关系
      • 4.10.2 哈希表
      • 4.10.3 双指针算法
        • 4.10.3.1 双指针算法实战
        • 4.10.3.2 双指针进阶:滑动窗口算法
      • 4.10.4 字符串匹配 KMP算法
        • 4.10.4.1 字符串匹配B-M算法
      • 4.10.5 快速傅里叶变换
      • 4.10.6 回溯算法
      • 4.10.7 动态规划
      • 4.10.8 分治算法
      • 4.10.9 Dijkstra算法
  • 5 第六单元: systemview通信仿真
    • 5.1 SystemView概述
    • 5.2 模拟通信系统 数字系统的仿真分析
    • 5.3 SystemView通信系统仿真进阶
    • 5.4 新建课程目录
  • 6 第四单元:MATLAB高级应用
    • 6.1 符号运算基础
      • 6.1.1 利用Matlab自动推导公式
    • 6.2 Matlab中的数值计算
      • 6.2.1 积分的计算
      • 6.2.2 龙格库塔:常微分方程的数值解法
      • 6.2.3 fmincon函数与非线性方程最小值
    • 6.3 统计、拟合、插值
      • 6.3.1 协方差与相关系数
    • 6.4 GUI设计初步
    • 6.5 matlab GUI界面编程
      • 6.5.1 gui实例
      • 6.5.2 gui编程中常用函数
      • 6.5.3 App Designer入门
    • 6.6 实验:GUI设计图像空间变换系统
    • 6.7 作业:利用GUI设计 计算器、信号发生器等
    • 6.8 MTALB数据导入方法
    • 6.9 课外补充:MATLAB的App会取代GUI吗?
    • 6.10 模拟退火算法matlab实现
    • 6.11 遗传算法的Matlab实现
      • 6.11.1 进化算法(Evolutionary Algorithm)及相关函数介绍
    • 6.12 粒子群算法 matlab实现
      • 6.12.1 粒子群算法及MATLAB实例仿真
    • 6.13 BP网络的应用
    • 6.14 matlab 结构体
    • 6.15 群智能算法合集
  • 7 拓展知识
    • 7.1 什么是算法的时间复杂度?
    • 7.2 Notepad++使用教程
    • 7.3 MATLAB常用函数总结
    • 7.4 MATLAB常用知识点总结
    • 7.5 MATLAB命令大全
    • 7.6 视频:MATLAB官方基础教程
    • 7.7 经典书籍:Matlab2012经典超强教程
    • 7.8 经典书籍:MATLAB揭秘(自学宝典)
    • 7.9 经典资料:MATLAB N个实用技巧
    • 7.10 Matlab编程小技巧
    • 7.11 寻优算法
      • 7.11.1 Dijkstra算法python实现
    • 7.12 PYTHON基础教程
      • 7.12.1 Python进阶
      • 7.12.2 Python小技巧
      • 7.12.3 Python总结
        • 7.12.3.1 Python循环语句总结
        • 7.12.3.2 24个顶级Python库
        • 7.12.3.3 魔法函数
      • 7.12.4 廖雪峰python
      • 7.12.5 正则表达式基础
      • 7.12.6 numpy
        • 7.12.6.1 101道Numpy习题
        • 7.12.6.2 Numpy简要语法教程
        • 7.12.6.3 Numpy实现全连接神经网络 (手写数字识别)
        • 7.12.6.4 图解NumPy
      • 7.12.7 matplotlib
        • 7.12.7.1 matplotlib练习50题
        • 7.12.7.2 Matplotlib速查表
        • 7.12.7.3 Matplotlib 实操指南
      • 7.12.8 Python3 模块 import
      • 7.12.9 Python 小项目
    • 7.13 参考资源:数据结构与算法
      • 7.13.1 十大经典排序算法总结
    • 7.14 机器学习概述
      • 7.14.1 反向传播算法
        • 7.14.1.1 反向传播的数学原理
      • 7.14.2 极大似然估计
        • 7.14.2.1 极大似然估计与最小二乘法
      • 7.14.3 Batch Normalization
        • 7.14.3.1 Batch Normalization&Dropout浅析
        • 7.14.3.2 ​BN层的梯度反向传播计算
        • 7.14.3.3 Batch Size的大小与神经网络的性能
        • 7.14.3.4 标准化和归一化
      • 7.14.4 主成分分析PCA与SVD奇异值分解
        • 7.14.4.1 岭回归 与 PCA
        • 7.14.4.2 PCA原理推导
        • 7.14.4.3 PCA原理新解
        • 7.14.4.4 svd
        • 7.14.4.5 PCA数学原理
      • 7.14.5 正则化
        • 7.14.5.1 L1、L2正则化和过拟合 总结
        • 7.14.5.2 L1 和 L2 正则化的直观解释
      • 7.14.6 SVM
        • 7.14.6.1 从零推导支持向量机(SVM)
        • 7.14.6.2 支持向量机(SVM)介绍
        • 7.14.6.3 SVM推导与实战
        • 7.14.6.4 支持向量机的直观理解
        • 7.14.6.5 浅显易懂的支持向量机SVM
      • 7.14.7 线性回归
      • 7.14.8 逻辑回归
      • 7.14.9 BP算法
        • 7.14.9.1 万能逼近——神经网络拟合任意函数原理
      • 7.14.10 激活与池化
        • 7.14.10.1 激活函数与损失函数 小结
      • 7.14.11 深度学习简述
        • 7.14.11.1 MATLAB2020深度学习实例
      • 7.14.12 损失函数与误差反向传播
        • 7.14.12.1 梯度下降与损失函数
      • 7.14.13 深度学习优化问题
      • 7.14.14 梯度下降法
        • 7.14.14.1 各类梯度下降算法的Python实现
        • 7.14.14.2 梯度下降的直观理解
        • 7.14.14.3 动量、RMSProp、Adam
      • 7.14.15 卷积的概念
        • 7.14.15.1 卷积的矩阵化算法
      • 7.14.16 局部连接
      • 7.14.17 RNN
      • 7.14.18 LSTM
      • 7.14.19 CNN-四大经典CNN技术浅析
      • 7.14.20 熵(Entropy)与交叉熵
      • 7.14.21 softmax函数详解
      • 7.14.22 自编码算法详细理解与代码实现
      • 7.14.23 pytorch
        • 7.14.23.1 ​PyTorch简介
          • 7.14.23.1.1 Pytorch快速入门资料
        • 7.14.23.2 CNN的PyTorch实现
        • 7.14.23.3 pytorch总结
        • 7.14.23.4 PyTorch trick 集锦
        • 7.14.23.5 在PyTorch上加载自定义数据集
        • 7.14.23.6 实战:Pytorch识别验证码
        • 7.14.23.7 实战:Transformer的最简洁pytorch实现
        • 7.14.23.8 使用PyTorch实现神经网络分类
      • 7.14.24 卷积神经网络CNN概述
        • 7.14.24.1 CNN 简易原理
        • 7.14.24.2 卷积神经网络CNN原理详解
        • 7.14.24.3 自己手写一个卷积神经网络
        • 7.14.24.4 CNN反向传播算法
        • 7.14.24.5 卷积计算、作用与思想
        • 7.14.24.6 用卷积神经网络CNN识别手写数字集
        • 7.14.24.7 卷积 池化 参数的计算
        • 7.14.24.8 im2col方法实现卷积算法
        • 7.14.24.9 卷积核的梯度计算
        • 7.14.24.10 卷积层反向传播推导及实现
        • 7.14.24.11 反向传输算法
          • 7.14.24.11.1 resnet残差网络
        • 7.14.24.12 CNN反向传播的MATLAB实现
      • 7.14.25 神经网络的调参技巧
      • 7.14.26 BP神经网络
        • 7.14.26.1 零开始搭建bp神经网络
        • 7.14.26.2 MATLAB自带的bp工具箱
        • 7.14.26.3 神经网络中偏置(bias)的作用
      • 7.14.27 聚类分析 k-means
        • 7.14.27.1 matlab做聚类分析(k-means)
        • 7.14.27.2 聚类模型探讨综述
        • 7.14.27.3 5种经典聚类算法
      • 7.14.28 深度学习的一些概念
      • 7.14.29 人工智能简述:AI的过去和现在
      • 7.14.30 k-NN(k近邻算法)
      • 7.14.31 神经网络中的优化器:BGD、SGD、MBGD、Momentum
      • 7.14.32 卷积神经网络的经典网络总结
        • 7.14.32.1 卷积神经网络中十大拍案叫绝的操作
      • 7.14.33 GAN 对抗样本攻击
      • 7.14.34 蒙特卡洛模拟
      • 7.14.35 dropout与随机部分连接
      • 7.14.36 Jupyter 等 IDE概览
      • 7.14.37 分类算法常用评价指标
      • 7.14.38 Inception 网络与不变性
      • 7.14.39 卷积神经网络的可视化
      • 7.14.40 隐马尔可夫模型HMM
        • 7.14.40.1 马尔科夫链
    • 7.15 MATLAB音频处理
      • 7.15.1 python处理音频信号
    • 7.16 图像处理
      • 7.16.1 图像处理中的指标
    • 7.17 代码集
    • 7.18 论文写作与阅读方法
      • 7.18.1 期刊投稿攻略
      • 7.18.2 论文排版教程
      • 7.18.3 SCI-HUB论文下载技巧
      • 7.18.4 几种论文写作神器,提高写作效率
      • 7.18.5 latex入门
      • 7.18.6 LaTeX教程
    • 7.19 机器学习常用的网站以及资源
      • 7.19.1 很详细的ML&DL学习博客
    • 7.20 SymPy 符号计算基本教程
  • 8 程序设计数学基础
    • 8.1 编程数学基础
      • 8.1.1 概率的历史
      • 8.1.2 概率
        • 8.1.2.1 常见概率分布
          • 8.1.2.1.1 二维正态分布
        • 8.1.2.2 蒙特卡罗方法
        • 8.1.2.3 置信区间
        • 8.1.2.4 协方差与相关系数
      • 8.1.3 矩阵 向量求导法则
      • 8.1.4 雅可比矩阵 海森矩阵
      • 8.1.5 矩阵的几种分解方式
      • 8.1.6 行列式和代数余子式
      • 8.1.7 向量
      • 8.1.8 矩阵的基本运算
      • 8.1.9 矩阵分析
      • 8.1.10 矩阵的LU分解
      • 8.1.11 矩阵奇异值分解(SVD)
        • 8.1.11.1 SVD分解2
        • 8.1.11.2 SVD分解逐步推导
        • 8.1.11.3 奇异值与特征值的意义
      • 8.1.12 随机向量
        • 8.1.12.1 随机过程简述
      • 8.1.13 投影矩阵和最小二乘
      • 8.1.14 知乎数学精选集
        • 8.1.14.1 高数问题集
      • 8.1.15 小波变换
      • 8.1.16 程序设计数学基础1:高等数学
      • 8.1.17 程序设计数学基础2:线性代数
      • 8.1.18 程序设计数学基础3:概率论和数理统计
      • 8.1.19 向量的距离与相似度计算
      • 8.1.20 复数
      • 8.1.21 高等数学——幂级数
      • 8.1.22 无穷小的本质
      • 8.1.23 数列极限和收敛性
      • 8.1.24 不定积分技巧总结
    • 8.2 有趣的数学题目
    • 8.3 高等数学
      • 8.3.1 泰勒级数
  • 9 路径规划与智能算法
    • 9.1 常见路径规划算法简介
    • 9.2 Dijkstra算法详细
  • 10 教学文档
    • 10.1 授课计划
    • 10.2 课程标准
论文写作与阅读方法


一款公式输入神器实测


本文推荐一个公式输入神器,只要截图就能识别公式,手写的公式都能识别。经过实测,几乎没有识别不出的公式,并可以输入到word、markdown、latex文件。

一、前言

写论文、博客,技术文档,公式输入非常麻烦,绝大部分朋友记不住latex代码,机器之心推荐了一篇文章《最好用的文字与公式编辑器,这套数学笔记神器送给你》推荐了公式神器 Mathpix Snip。本站对这个神器进行实测。

二、识别公式测试

Mathpix Snip 这款神器只要截个图,公式会自动转化为 LaTex 表达式,我们只需要简单地修改就行了。

本站进行了实测,写了一个使用说明:

  • 安装软件
    网址:Mathpix Snip:mathpix.com/
    安装就按照默认选项点击下一步即可。

  • 对公式截图和生成latex代码

这部分很简单,启动软件后,按快捷键:

CTRL+ALT+M

即可开始截图,对公式截图后,软件能自动识别并生成latex代码。

识别效果如图:

a.电子公式的识别,几乎100%的准确率。



原始图片
转换后的公式



b.手写公式识别,只要字迹清楚,识别率非常高。



手写公式
转换后的效果



三、插入公式到文档

  • 插入到word

第一步,需要安装mathtype插件(安装过程略,可以自行百度)。

第二步,从Mathpix Snip复制公式(复制第二行代码,即$代码$,点copy即可),光标点到输入公式的地方,直接粘贴,这个时候,word里面显示的还是tex代码($代码$这样的格式)。

第三步,使用mathtype的转换快捷键:

ALT+\

即可将tex代码转换为公式。

  • 插入到markdown

打开typora,从Mathpix Snip复制公式(复制第三行代码,$$代码$$,点copy即可,如果单行公式,也可以复制$代码$),光标点到输入公式的地方,直接粘贴即可。效果如图:



插入到markdown文件



  • 插入到latex

从Mathpix Snip复制公式(复制第二行代码,即$代码$,点copy即可),光标点到输入公式的地方,直接粘贴

总结

有了Mathpix Snip这款神器,输入公式太方便了,大大提高了效率,可以方便转换图片的公式到word、markdown和latex文件,再也不用担心我的公式写不出来了。




=================================================



推荐一个神器画出论文中酷炫的机器学习图



本人在写论文的时候,很多图片是用matplotlib和seaborn画的,但是,我还有一个神器,Scikit-plot,通过这个神器,画出了更加高大上的机器学习图,本文对Scikit-plot做下简单介绍。

安装说明

安装Scikit-plot非常简单,直接用命令:

pip install scikit-plot

即可完成安装。

仓库地址: github.com/reiinakano/s

里面有使用说明和样例(py和ipynb格式)。

使用说明

简单举几个例子

  • 比如画出分类评级指标的ROC曲线的完整代码:

from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
X, y = load_digits(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)
nb = GaussianNB()
nb.fit(X_train, y_train)
predicted_probas = nb.predict_proba(X_test)
# The magic happens here
import matplotlib.pyplot as plt
import scikitplot as skplt
skplt.metrics.plot_roc(y_test, predicted_probas)
plt.show()

效果如图(相当高大上!)





  • P-R曲线就是精确率precision vs 召回率recall 曲线,以recall作为横坐标轴,precision作为纵坐标轴。首先解释一下精确率和召回率。

import matplotlib.pyplot as plt
from sklearn.naive_bayes import GaussianNB
from sklearn.datasets import load_digits as load_data
import scikitplot as skplt
# Load dataset
X, y = load_data(return_X_y=True)
# Create classifier instance then fit
nb = GaussianNB()
nb.fit(X,y)
# Get predicted probabilities
y_probas = nb.predict_proba(X)
skplt.metrics.plot_precision_recall_curve(y, y_probas, cmap='nipy_spectral')
plt.show()





  • 混淆矩阵是分类的重要评价标准,下面代码是用随机森林对鸢尾花数据集进行分类,分类结果画一个归一化的混淆矩阵。

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_digits as load_data
from sklearn.model_selection import cross_val_predict
import matplotlib.pyplot as plt
import scikitplot as skplt
X, y = load_data(return_X_y=True)
# Create an instance of the RandomForestClassifier
classifier = RandomForestClassifier()
# Perform predictions
predictions = cross_val_predict(classifier, X, y)
plot = skplt.metrics.plot_confusion_matrix(y, predictions, normalize=True)
plt.show()





  • 其他图如学习曲线、特征重要性、聚类的肘点等等,都可以用几行代码搞定。





总结

本文对Scikit-plot做下简单介绍,这是一个机器学习的画图神器,几行代码就能画出高大上的机器学习图,作者当年的博士论文也是靠这个画图的。

仓库地址:github.com/reiinakano/s

里面有使用说明和样例。



====================================================


那些酷炫的深度学习网络图怎么画出来的?



本文我们聊聊如何才能画出炫酷高大上的神经网络图,下面是常用的几种工具。

作者&编辑 | 言有三


1 NN-SVG

这个工具可以非常方便的画出各种类型的图,是下面这位小哥哥开发的,来自于麻省理工学院弗兰克尔生物工程实验室, 该实验室开发可视化和机器学习工具用于分析生物数据。





github地址:github.com/zfrenchee

画图工具体验地址:alexlenail.me/NN-SVG/

可以绘制的图包括以节点形式展示的FCNN style,这个特别适合传统的全连接神经网络的绘制。





以平铺网络结构展示的LeNet style,用二维的方式,适合查看每一层featuremap的大小和通道数目。





以三维block形式展现的AlexNet style,可以更加真实地展示卷积过程中高维数据的尺度的变化,目前只支持卷积层和全连接层。





这个工具可以导出非常高清的SVG图,值得体验。


2 PlotNeuralNet

这个工具是萨尔大学计算机科学专业的一个学生开发的,一看就像计算机学院的嘛。





首先我们看看效果,其github链接如下,将近4000 star:

github.com/HarisIqbal88

看看人家这个fcn-8的可视化图,颜值奇高。





使用的门槛相对来说就高一些了,用LaTex语言编辑,所以可以发挥的空间就大了,你看下面这个softmax层,这就是会写代码的优势了。





其中的一部分代码是这样的,会写吗。

\pic[shift={(0,0,0)}] at (0,0,0) {Box={name=crp1,caption=SoftmaxLoss: $E_\mathcal{S}$ ,%    
fill={rgb:blue,1.5;red,3.5;green,3.5;white,5},opacity=0.5,height=20,width=7,depth=20}};

相似的工具还有:github.com/jettan/tikz_


3 ConvNetDraw

ConvNetDraw是一个使用配置命令的CNN神经网络画图工具,开发者是香港的一位程序员,Cédric cbovar。





采用如下的语法直接配置网络,可以简单调整x,y,z等3个维度,github链接如下:

cbovar.github.io/ConvNe





使用方法如上图所示,只需输入模型结构中各层的参数配置。





挺好用的不过它目标分辨率太低了,放大之后不清晰,达不到印刷的需求。


4 Draw_Convnet

这一个工具名叫draw_convnet,由Borealis公司的员工Gavin Weiguang Ding提供。





简单直接,是纯用python代码画图的,

github.com/gwding/draw_

看看画的图如下,核心工具是matplotlib,图不酷炫,但是好在规规矩矩,可以严格控制,论文用挺合适的。






类似的工具还有:github.com/yu4u/convnet


5 Netscope

下面要说的是这个,我最常用的,caffe的网络结构可视化工具,大名鼎鼎的netscope,由斯坦福AILab的Saumitro Dasgupta开发,找不到照片就不放了,地址如下:

github.com/ethereon/net





左边放配置文件,右边出图,非常方便进行网络参数的调整和可视化。这种方式好就好在各个网络层之间的连接非常的方便。


其他

再分享一个有意思的,不是画什么正经图,但是把权重都画出来了。

scs.ryerson.ca/~aharley






看了这么多,有人已经在偷偷笑了,上PPT呀,想要什么有什么,想怎么画就怎么画。







不过妹子呢?怎么不来开发一个粉色系的可视化工具呢?类似于这样的






总结

那么,你都用什么画呢?欢迎留言分享一下!



高效读论文的“三遍法”



一、引言 Introduction

一个正常的研究人员每年得花上百小时读论文。所以学会高效读论文是一个至关重要的技能,但这项技能却很少提及。

刚刚入学的研究生,往往必须面对大量的教训错误,浪费了很多时间,才能自发掌握读论文的方法。但不少人在掌握了方法之前就已经丧失读论文的动力。

而本文介绍的三遍法则可以:

    • 避免在鸟瞰论文全貌前,被论文的细节淹没

    • 估算review论文所需的时间

    • 结合自己的空余时间和需要,调整论文评估的深度

那么,什么是三遍法呢?

顾名思义,其精髓就在于分三遍读论文,而不是从开头一直看到结尾。

每一遍阅读论文都有都有特定的目标,且建立在上一遍阅读的基础上:

    1. 第一遍,了解论文的主要思想(general idea)

    2. 第二遍,掌握论文的内容,不过也会忽略细节

    3. 第三遍,深入了解这篇论文

下面就开始具体地介绍一下三遍法~


二、第一遍(5步+5C)

第一遍通过“5步”+“5C”快速略读整篇论文,并获得论文的“鸟瞰图”。这也可以让自己决定是否继续精读这篇论文。

第一遍通常占用5到10分钟的时间,包含下面的5个步骤

    1. 仔细阅读 标题Title,摘要Abstract,以及引言Introduction

    2. 阅读所有章节和子章节的标题,忽略章节的内容

    3. 瞥一眼公式(如果有的话),确定论文的理论基础

    4. 读结论

    5. 瞥一眼引用文献,注意下有没有你读过的论文

(顺便一提,你可能发现了,这里并没有和其他人一样建议在第一步的时候就注意所有插图。)

在完成上面5步后,如果你能回答如下的5个"C",那么你的第一遍就算读到位了

1. Category(分类):这个论文的种类是什么?

  • 论文是提出了什么新方法

  • 还是说分析了现有的系统

  • 或者描述了一个研究的原型?

2. Context(上下文):

  • 本论文的相关论文是哪些?

  • 论文基于何种理论分析了问题?

3. Correctness(正确性):

你觉得论文的假设靠谱不靠谱

4. Contributions(贡献/创新)

这论文主要的贡献是什么?

5. Clarity(清晰度)

这论文写得怎么样,文笔好不好?


有了上面五个问题的答案,你可能就会枪毙一些不靠谱的论文(也不需要把它们打出来细看了,节约纸张,保护森林,拯救地球)。

不过我们枪毙的论文不一定是不靠谱,也有可能是我们对这个方向本身了解不深。不过嘛就算后面会被打脸,但大部分时候,对于非自己研究的领域第一遍筛选也足够了。

顺便说一句,自己写出的论文,大多审稿人(和读者)也可能只读第一遍。因此,要注意选择连贯的章节和小节标题,并写出简明全面的摘要

    • 如果审稿人看了一遍后还是不能理解文章的主旨,那么你的文章大概率凉了。

    • 如果读者五分钟内不能理解文章的要点,那么他很可能失去接触你高深思想的机会。

出于这些原因,做一张精美的“图形摘要”是一个很好的主意。


三、第二遍(注释+总结观点与证据)

第二遍读论文就需要更多的关注,真的需要看正文了,不过诸如证明之类的细节也要暂时略过。

读第二遍的时候,在文章上做注释,在旁边空白处写一下自己的评论。换句话说,“记下你不理解的术语,还有那些你想问作者的问题”。如果你是个审稿人,那么写review的时候这些随手的笔记会帮上你。除了正文内容,还要注意:

    1. 仔细阅读论文中的各类图表。特别注意文中的图片的细节,比如坐标轴对不对。这些细节错误往往能区分粗制滥造与真正杰出的工作。

    2. 标记一些有关但你没读过的参考文献,之后补一补(这对了解论文的背景很有用处)

第二遍会耗费一个有经验读者至多一个小时的时间。第二遍过后,你应该能掌握文章的主要内容,并给他人总结文章的主要观点,以及观点的支撑证据。

读完第二遍,对于你感兴趣的论文也足够了。不过如果你就要研究它的话还得再看第三遍。

有时第二遍论文看完了之后依然搞不懂文章内容,这可能是因为论文主题对自己比较新,有一些不熟的术语和缩写。也有可能作者用了些你不懂的证明或者实验上的骚操作。也有可能这个论文本身写作水平很差,有一堆拍脑袋的断言和乱七八糟的引用。这个时候,你可以:

    1. 把这篇论文扔到一边,并祈祷没有它你的科研也会顺利

    2. 之后再读这篇论文,比如在学习这篇论文的背景知识

    3. 头铁来看接下来的第三遍


四、第三遍(脑内复现)

为了完全掌握一篇论文,特别是作为一个审稿人,你还得看第三遍。第三遍的关键在于你需要 脑内复现(virtually re-implement) 这篇论文,也就是说,和作者做相同的假设,并且重新创作出这篇论文的工作。这样,不仅论文的创新点,就连隐藏的假设和缺陷都可以简单地认识到。

这一遍需要对细节给予很大的关注。你应该发现并且质疑每一段语句中的每一个假设。除此之外,也要考虑如果是自己,该如何去展示这个idea。这种真实论文与脑内论文的对比可以深刻思考论文中的证明与展示方法,并且久而久之总会有些不错的内容扩展到自己的独门秘籍里(即通过比较自己“脑补”的论文,发现别人“写论文”的诀窍并学习)。

别忘了,第三遍阅读的时候,还应该记下未来工作的想法

这一遍可能需要花费一个初学者好多小时的时间,甚至对有经验的读者也需要1~2小时(以上)。在读完这一轮之后,读者应该可以在回忆中重构整个论文的结构,也可以去辨别论文的优势和不足的点。特别是可以指出论文中不严谨的假设,漏掉的引用和实验/分析上的潜在问题。


Ex 运用:写文献综述吧

论文阅读的技巧可以在做文献综述中体现到。文献综述需要你读数十篇论文,而且很可能是对一个未知领域的数十篇论文。如果已经知道怎么读论文了,那么下个问题就是该读哪些论文?

第一步:首先,去类似Google Scholar这样的平台,输入合适的关键词,去找该领域3~5篇最近高被引的论文。对每篇论文读第一遍,获得一个大体的感觉,之后读一读他们“有关工作related work”的章节。这章节就是最近工作一个袖珍的summary,并且如果你足够幸运,章节里甚至会有些不错的综述文献。

如果没找到综述,那么进行第二步;否则结合综述文献跳转第三步。

第二步:自行留意多次引用的论文名或者重复的作者名,这些通常都是这个领域中最关键的论文和大佬,看看这些大佬最近还发了啥。(这也能告诉你这个领域的顶会,因为大佬通常只发顶会)

第三步:去看看这些顶会的官网,看看最近的前沿进展。在快速略览时就可以找到最近高质量的相关工作。这些论文,以及你之前放一边的那些论文,就可以撑起来第一个版本的survey。把这些论文按照之前说的看两遍,如果这些论文引用了你没见过的关键论文,那就下下来读,必要时这样迭代着读。