| by msbeta | No comments

Tensorflow中使用tf.keras.utils.get_file下载数据集

在神经网络中经常需要下载数据集(Dataset),Tensorflow的Keras提供了tf.keras.utils.get_file()函数帮助我们实现数据集下载解压的功能。

函数原型

origin: 数据集(Dataset)的URL路径;

fname: 下载到本地后的文件名称,如果是绝对路径,下载的文件就会存储在这个路径下;

md5_hash: 已废弃,使用file_hash;

file_hash: 文件的md5,用于数据校验;

cache_subdir: 下载到本地的文件存储子目录;

cache_dir: 下载到本地的文件存储目录,默认路径~[……]

继续阅读

Read More
| by msbeta | No comments

实现一个python函数装饰器(Decorator)

装饰器本质上是一个 Python 函数或类,它可以让其他函数或类在不需要做任何代码修改的前提下增加额外功能,装饰器的返回值也是一个函数/类对象。它经常用于为已有函数/类添加记录日志、计时统计、性能测试等。

首先定义一个倒计时函数,这个函数的功能非常简单,就是把n从当前值减少到0。

程序输出:

countdown

1.为函数增加一个日志装饰器

假设现在要增强countdown的功能,在函数调用前后自动打印日志,又不想修改函数自身的功能。这种在代码运行期间动态增加功能的方式,称之为装饰器(Decorator)。

能打印日志的decorator,可以定义如下:[……]

继续阅读

Read More
| by msbeta | No comments

C++11多线程-主动让出CPU使用权(yield)

在多线程的编程中,有时候一个线程需要等待IO操作或者等待其它某个条件满足,再继续执行。为了达到这样的目的,有时我们会写出如下的代码:

这样代码的问题在于,这个循环判断的操作会使得这个线程占满CPU的时间,造成资源的浪费。我们可以在一次判断结束后,让线程主动让出自己对CPU的使用权,让操作系统调度另一线程继续执行,过一会再回来判断操作是否完成,这样使得该线程的CPU占用时间大大减少。

1. std::this_thread::yield

C++ 11中提供了yield函数帮助我们实现让出CPU占用的目的。

示例代码如下:

程序输出:

waite[......]

继续阅读

Read More
| by msbeta | No comments

C++11多线程-线程休眠(sleep)

C++ 11之前并未提供专门的休眠函数。c语言的sleep、usleep其实都是系统提供的函数,不同的系统函数的功能还有些差异。

在Windows系统中,sleep的参数是毫秒。

在类Unix系统中,sleep()函数的单位是秒。

从C++11开始,中C++标准库提供了专门的线程休眠函数,使得你的代码可以独立于不同的平台。

1. 让线程休眠一段时间

std::this_thread::sleep_for用于Block当前线程一段时间。

sleep的时间间隔从纳秒到小时都有具体的定义。

比如我们想要一个线程休眠100ms。

[……]

继续阅读

Read More
| by msbeta | No comments

深度卷积生成对抗网络(DCGAN)

1.GAN的基本原理

GAN的基本原理其实非常简单,它包含两个网络,G网络(Generator)和D网络(Discriminator)。G网络的目标是尽量生成真实的图片去欺骗判别网络D,D网络的目标是尽量把G网络生成的图片和真实的图片分别开来。

最理想的结束状态是,G网络可以生成足以“以假乱真”的图片,而D网络,它难以判定G生成的图片究竟是不是真实的。

先看以下枯燥的数学语言描述下GAN的核心原理:

上述公式中:x表示真实图片,z表示输入G网络的随机噪声,而G(z)表示G网络生成的图片;D(x)表示D网络判断真实图片是否真实的概率(因为x就是真实的,所以对于D来[……]

继续阅读

Read More
| by msbeta | No comments

找出Numpy Array中的元素的最小值及它的索引

1.numpy array的最小值

numpy中提供了numpy.amin()函数,用来找出numpy array中沿着指定轴的最小值。函数的原型如下:

参数:
a: 待查询的数组数据;
axis: 指定查询的数据axis,如果不指定axis,模式查找所有元素的最小值;

以如下numpy array为例:

使用numpy.amin()查找最小值:

程序输出:

minimum element from numpy array :  11

2.找出numpy array最小值的索引

np.where可以找出numpy array中最小值的[……]

继续阅读

Read More
| by msbeta | No comments

动图详解常用的git命令

1.git merge

git merge用于将一个分支(branch)的修改应用到另一个分支(branch)上。git merge包含两种类型:fast-forward和no-fast-forward。

1.1 Fast-Forward merge

当目标分支(branch)相对于源分支(branch)没有额外的修改时,git不会创建额外的commit,直接进行merge。

1.2 No-Fast-Forward merge

当目标分支(branch)相对于源分支(branch)都有修改时,git会在目标分支(branch)上创建新的merging comm[……]

继续阅读

Read More
| by msbeta | No comments

深度学习中的反卷积(Transposed Convolution)

反卷积(Transposed Convolution)是一种图像上采样(UpSample)的方法,在DCGAN中用它来将随机采样的值转换为一张完整的图像。

Transposed Convolution

反向卷积也叫转置卷积,它是一种特殊的正向卷积,先按照一定的比例通过补0来扩大输入图像的尺寸,接着旋转卷积核(Kernel),再进行正向卷积。

反卷积的操作只是恢复了矩阵的尺寸大小,并不能恢复每个元素值。

Transposed Convolution将Output Size恢复为Input Size,对于Convolution过程,我们知道其Output Size与[……]

继续阅读

Read More
| by msbeta | No comments

车道线识别二-Lane Detection

文章来源:

https://github.com/yang1688899/CarND-Advanced-Lane-Lines

阈值过滤(thresholding)

这里会使用梯度阈值(gradient threshold),颜色阈值(color threshold)等来处理校正后的图片,捕获车道线所在位置的像素。(这里的梯度指的是颜色变化的梯度)

以下方法通过”cv2.Sobel()”方法计算x轴方向或y轴方向的颜色变化梯度导数,并以此进行阈值过滤(thresholding),得到二进制图(binary image):

通过测试发现使用x轴方向阈值在35到10[……]

继续阅读

Read More
| by msbeta | No comments

C++11新特性-std::tuple

1. 引入头文件

2. std::tuple初始化

这里要注意,不是所有的C++ 11编译器都支持copy-list-initialization的方式。如下代码所示。

3. 打印std::tuple

打印std::tuple可以将它的元素逐个打印出来,不过非常繁琐,我们可以通过如下通用的打印函数,帮助我们一次性的将tuple的所有要素打印出来。

输出:

(10, Test, 3.14)

4、合并多个std::tuple

std::tuple_cat函数可以将多个std::tuple合并为一个tuple。

输出:

[……]

继续阅读

Read More