[npnet] 串型网络

我们在之前的一篇笔记中使用简单的线性模型去识别 Fashion-MNIST 数据集,达到了 75% 到 80% 的准确率。通过对损失 [loss] 的可视化我们发现这个简单的模型并没有过拟合 [overfitting],说明我们基本达到了这个模型的上限了。我们如何增加提高识别的准确率呢?一个直接的做法就是提高模型的复杂度,比如我们可以使用简单的模型搭建一个复杂的神经网络。这一般来说也是最有效的方法。我们还可以通过数据预处理的方法来榨取原先模型的能力,只是我对此是门外汉,除了使数据具有零平均值 (zero mean) 和单位方差 (unit variance) 之外就一无所知了,所以我就在这方面就不展开了。

Read More

LeetCode Contest 169

这次只做出了前三题。最后一题我算了一下枚举复杂度也大概是 10!=3628800 左右,但是就老是 TLE。今天早上用 C 重新写了一下就过了。有点郁闷。

第一题Find N Unique Integers Sum up to Zero

找 n 个和为 0 且各不相同的数。

每次加入 i 和 -i 就能保证和为0。如果 n 是奇数,那么我们要添加 0。

class Solution:
    def sumZero(self, n: int) -> List[int]:
        ans = []
        if n & 1:
            ans.append(0)
        for i in range(1, n//2 + 1):
            ans.append(i)
            ans.append(-i)
        return ans

Read More

LeetCode Contest 167

上次参加 leetcode 比赛还是去年四月份的时候了。回想的时候总觉得时间过得很快。只是一年,以前一起比赛的小伙伴们包括我自己都已经离开哥村了。

第一题Convert Binary Number in a Linked List to Integer

以单向链表给出一个二进制数,将其转成十进制。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def getDecimalValue(self, head: ListNode) -> int:
        r = 0
        while head:
            r = r * 2 + head.val
            head = head.next
        return r

Read More

[npnet] 优化器

这篇笔记尝试着实现几种简单的机遇梯度下降的优化器 (Optimizer)。主要的参考资料是 Neural Networks Part 3: Learning and Evaluation。另外我还参考了 An overview of gradient descent optimization algorithms。这篇博文不仅有篇对应的论文:An overview of gradient descent optimization algorithms,还已经被翻译成中文了:梯度下降优化算法综述

Read More

[npnet] 逻辑回归

逻辑回归 (logistic regression) 是广义线性模型 (generalized linear model) 的一种,对应的是伯努利分布 (Bernoulli distribution)。如果我们在广义线性模型中使用的是多项分布 (multinomial distribution),那么我们将得到逻辑回归的推广——多项逻辑回归 (multinomial logistic regression)。我们在这里用逻辑回归来代表逻辑回归和多项逻辑回归。

Read More

[npnet] 线性回归

我们现在已经知道机器学习三个重要的模块是模型 (model)标准 (criterion) 以及 优化 (optimization)。在这篇笔记中我们讨论各个模块必要的基本功能,然后用 Python 给出模块的基类 (base class)。 最后我们继承这些基类实现上一篇笔记的线性模型 (linear model) 以及均方误差 (mean square error)。

Read More

[npnet] 序言

很早之前我就有一个“写一个机器学习的系列笔记”的想法了。之所以叫做“笔记”而不叫“教程”,是因为机器学习只是我的业余爱好之一,我并不精通此道。事实上,我只是学到最简单的皮毛知识,还不一定明白透彻。所以我把我将要写的这个系列定义为笔记,并且在开篇就写得明明白白,这样我就可以随心所欲地写而并不担心误人子弟。不过既然我把笔记放在网上了,那表明我也希望其他人能从我写的东西里得到启发。如果你发现我的理解有误或者文章有错,也请务必留言让我知道。

Read More

编辑 Raspbian 镜像

这个笔记记录如何在 Raspbian 上编辑 Raspbian 镜像。为什么会有这个需要呢?第一是因为经常在 Raspberry Pi 上尝试各种各样的东西,会把系统弄得乱七八糟,所以经常要重新刷 Raspbian ,因此就有了编辑 Raspbian 镜像的需求。第二是我现在用的是 Mac OS ,编辑镜像文件并不那么方便,所以就干脆在 Raspbian 系统中编辑 Raspbian 镜像了。

Read More

2018, 在路上

2018年,一直在路上,特别是在I-71。I-71是一条跨州的高速公路,从南端肯塔基州的路易斯维尔(Louisville, Kentucky)东北延向俄亥俄州的克里夫兰(Cleveland, Ohio),全长约345迈。之前每逢夏天,便约上几个好友沿着I-71开车到克里夫兰,或是参观艺术博物馆,或是听音乐会,又或是去那个不甚似国家公园的国家公园骑自行车。到了今年,那些个好友也已经有好几个毕业离开了。虽然少了好友一起在I-71路上寻找悠闲,但是I-71对我来说有了它新的意义:它变成了李之仪的长江。

卜算子

我住长江尾,君住长江尾。
日日思君不见君,共饮长江水。
此水几时休,此恨何时已。
只愿君心似我心,定不负相思意。

Read More

Simple Grid Detection for Sudoku

Sudoku is a very interesting puzzle, and it is very easy to get familiar with the rules of the game. I always like to compare sudoku with number theory, they are easy to be understood but can be hard to solve. Fermat's Last Theorem, an easily understood problem even by middle school students, took mathematians 358 years to solve it completely. Solving sudoku puzzles can take even longer: it is proven that solving sudoku puzzels is an NP-complete problem! However, classical 9x9 sudoku puzzles are still feasible using backtracking algorithm. We are not going to talk about how to solve sudoku puzzles here though, we are trying to sovle another problem: detect grids in images containing sudoku puzzles.

To make the problem more concrete, let's make some assumption on the image that contains a sudoku puzzle:

  1. The image only contains one sudoku puzzle
  2. The sudoku puzzle is the largest block in the image
  3. There is no/little distorsion/rotation of the sudoku puzzle grid

Also in this article, we focus on only simple solutions without heavy image processing. We will use Pillow to read images and convert them to gray scale images, and we use Numpy to manipulate images as arrays. For visualization, we use Matplotlib.

Read More