说明
笔者个人博客网站:https://hk-shao.github.io/
最新文章和更新都会在这里
从识别数字开始
MNIST文件中包含了几万个手写数字的灰度图片,这些图片尺寸是28x28,灰度值为[0, 256)。
机器学习有两个入门的“Hello World”,除了做散点图的回归直线外,就是识别手写数字,这个过程一般涉及三个神经网络层,输入层(28x28 = 784个神经元),隐藏层(神经元个数按需决定),输出层(10个神经元,代表10个可能的数字)。
所以将模型建好后,训练模型,优化所有的神经元权重和偏移,使得残差平方的平均值loss降到最低。得到的模型后,将含有784个数值的矩阵X(也就是手写的数字图片)输入到模型中,经过一层层神经元,最后映射到一个含有10个数值的矩阵Y(也就是 Y = f(X) ),这个矩阵有10个数值,每个数值代表相应数字的概率。
我们选取概率最大的那个,这样就实现了输入一张手写数字图片,输出这张图片上所写的数字。经过百万次训练,这个准确率可以达到95%以上。
创造数字?
因为笔者刚刚接触机器学习,技术还很水,GAN什么的还搞不懂,于是单纯的想创造个模型,输入[0, 9]之间的数字,输出一张“手写数字图片”。如果 x, y, z 分别表示像素横坐标,像素纵坐标和数字[0, 9],通过一个复杂的函数 f , 映射到像素灰度值y [0, 256), 也就是 y = f(x, y, z)。
我把函数设计的很简单:
g ( x , y , z ) = [ a 1 a 2 a 3 ] [ x y z ] + b 1 g(x, y, z) = \left[ \begin{matrix} a_{1} & a_{2} & a_{3} \end{matrix} \right] \left[ \begin{matrix} x \\ y \\ z \end{matrix} \right] + b_{1} g(x,y,z)=[a1a2a3]⎣⎡xy