Mac下Clion配置openGL环境
CMakeLists.txt
123456789101112131415161718192021cmake_minimum_required(VERSION 3.17)project(learn1)set(CMAKE_CXX_STANDARD 14)# 添加头文件set(GLFW_H /usr/local/Cellar/glfw/3.3.2/include/GLFW)set(GLAD_H /usr/local/include/glad)include_directories(${GLFW_H} ${GLAD_H})# 添加目标链接set(GLFW_LINK /usr/local/Cellar/glfw/3.3.2/lib/libglfw.3.dylib)link_libraries(${OPENGL} ${GLFW_LINK})link_libraries(/usr/local/lib)include_directories(/usr/local/include)add_executable(learn1 ...
eigen
在使用Eigen库做矩阵变换的时候,有时候会发生错误,而且Eigen库坑爹的一点是他不会把错误在哪一行告诉你,而是只给出一个错误信息,这一点就很烦。
笔者使用Eigen库的时候,就遇到了下面的报错error: static_assert failed due to requirement’(int(Eigen::internal::size_of_xpr_at_compile_time<Eigen::Matrix<float, 3, 3, 0, 3, 3>…
当然,实际报错的内容比上面要长,我也只截取了一段错误信息。
根据网上各种资料显示,出现这个错误基本上都是与矩阵的维度有关。
这里贴一下我的代码:
12345678Eigen::Matrix4f R=Eigen::Matrix4f::Identity();Eigen::Matrix3f N;N<<1,2,3,4,5,6,7,8,9;for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ R(i,j)=N(i,j); } ...
被3整除整数的文法表示
能被3整除整数的文法表示
此题为编译原理相关题目,考察文法表示相关内容。
原文地址:被3整除整数的文法表示
题目
写出所有能被3整除的十进制整数的文法表示。(注:为方便表示,规定整数首位可以为0,即018此种表示是合法的,就是整数18。)
分析
由数学知识可以得到,如果整数的每个位上的数字相加之和可以被3整除,则此整数可以被3整除。
因此,我们用是否可以被3整除为标准,将0-9这十个数字分成三组。
0,3,6,9:可以被3整除
1,4,7:被3整除余1
2,5,8:被3整除余2
文法表达式为:G=(V$_N$,V$_T$,P,S),其中
V$_N$={S,A,B},非终结符集合
V$_T$={0,1,2,3,4,5,6,7,8,9},终结符集合
S为开始符
接下来重点研究的是P中规则的集合。
首先,在数字中加上{0,3,6,9}此类数字时,不影响数字的整除性,即若原本的数字可被3整除,则加上{0,3,6,9}此类数字后,依旧可以被3整除;若原本数字就不能被3整除,则加上{0,3,6,9}此类数字后,依旧不能被3整除。
其次,将1,4,7中的任意一个数字与2,5,8中的任意一个相 ...
神经网络可以计算任何函数的可视化证明
写在前面
此文是我入门AI的学习笔记,教材是《nueral networks and deep learning》,作者Michael Nielsen。
这是一本免费的书籍,网址在这里.
此文是对书中第四章内容的整理归纳和分析,关于前几章的知识点,在我之前的博客之中。
初学者入门,可能会有错误,请大家批评指正。
本次的内容主要是为了证明一个问题,即神经网络可以用来计算任何一个函数。
这是一种普遍性的解释
This result tells us that neural networks have a kind of universality. No matter what function we want to compute, we know that there is a neural network which can do the job.
在此次的证明中,我们忽略了函数本身的数学性质,而是从图形的角度出发,用一种直观、形象、可视化的方式证明了这个普遍性。
两个预先声明
在进行证明之前,有两点预先声明需要澄清
神经网络给出的并不是函数的精确值,而是一个近似估计(app ...
神经网络为何很难训练?
写在前面
此文是我学习AI入门的笔记。学习教材《neural networks and deep learning》,作者Michael Nielsen。
这是一本免费的书籍,网址在这里。
此文是第五章内容的学习总结,前几章的内容总结可以见我的博客。
初学者入门,如有错误,请指正。
消失的梯度问题(The vanishing gradient probm)
当要处理一个比较复杂的问题时,我们往往倾向于将问题分解成一个个简单的问题,逐个解决。
将这一点运用在神经网络上,我们可以使用多层的神经网络来处理问题。
例如,如果我们在进⾏视觉模式识别:
在第⼀层的神经元可能学会识别边。
在第⼆层的神经元可以在边的基础上学会识别出更加复杂的形状,例如三⻆形或者矩形。
第三层将能够识别更加复杂的形状。
依此类推。这些多层的抽象看起来能够赋予深度⽹络⼀种学习解决复杂模式识别问题的能力。
前面我们所搭建的用来识别手写数字的网络,是一个三层(输入层-隐藏层-输出层)的浅层神经网络,第一层784个神经元,第二层30个神经元,第三层10个神经元。
12>>> import network2 ...
卷积神经网络(CNN)识别手写数字MNIST(附代码)
写在前面
此文是我学习AI入门的笔记。学习教材《neural networks and deep learning》,作者Michael Nielsen。
这是一本免费的书籍,网址在这里。
此文是第六章内容的学习总结,前几章的内容总结可以见我的博客。
初学者入门,如有错误,请指正。
简介卷积神经网络
在之前的学习中,我们都是使用全连接的神经网络来处理问题的。即,⽹络中的神经元与相邻的层上的每个神经元均连接,在此之前我们已经获得了98%的分辨率了。
但是在识别手写数字的问题上,这样连接方式有很大的缺点:
它忽略了图像本身的空间结构(spatial structure),而以同样的方式对待所有的输入像素。
今天介绍的卷积神经网络则可以很好的利用图像的空间结构,是处理图像分类问题的一个很好的框架。
学习CNN框架,就要了解它的三个基本概念:
Local receptive fields 局部感受野
shared weights 共享权重
pooling 池化
1. 局部感受野
在识别手写数字的问题中,输入层是28 * 28的图像的像素灰度,因此输入层共有28 * 28=784个 ...
反向传播算法(backpropagation)计算梯度下降(SGD)详解
写在前面
此文是我学习AI入门的笔记。学习教材《neural networks and deep learning》,作者Michael Nielsen。
这是一本免费的书籍,网址在这里
这是我对第二章的反向传播算法的总结笔记,请看完第二章之后再来看这篇文章。
第一章的学习笔记在这里,会对理解此篇有帮助。
初学者入门, 可能会有错误,请大家指正。
概念准备
带权输入Z
z^l^=w^l^a^l^^-^^1^+b^l^,其中l为层数
激活值a
a^l^=σ(z^l^),其中σ为S型神经元的输出函数
误差
δ^L^~j~=$\frac{\partial C}{\partial z}$
四个基本方程
输出层误差方程BP1
其中右边第一项是二次代价函数对激活值的偏导数,由二次代价函数的表达式可知此式还可以写成这个形式
使用上一层的误差δ^L^^+^^1^来表示当前层的误差δ^L^方程BP2
我们可以把矩阵的转置近似于看做反向移动,它提供给了我们通过l层的误差反向传递回来给第l-1层的误差的计算方法。
代价函数关于网络中任意偏置的改变率方程BP3
给了我们由误差 ...
改善神经网络的学习方法(交叉熵函数,过度拟合,规范化,初始化权重)
写在前面
此文是我学习ML入门的笔记。学习教材《neural networks and deep learning》,作者Michael Nielsen。
这是一本免费的书籍,网址在这里。
此文是第三章的学习笔记。
初学者入门, 可能会有错误,请大家指正。
第一章笔记和第二章笔记的链接。
———————————————————————————————————
为什么要改善?
要改善我们之前的神经网络,是因为它存在着以下几个问题:
1. 在一定条件下学习缓慢。
在我们之前用二次代价函数、随机梯度下降和反向传播算法定义的神经网络中,网络的学习速率主要取决于权重的偏导数,其表达式为
因此权重的偏导数正比于S型函数的一阶导数。而其一阶导数的图像如下所示
可以看出,当z的值很大或者很小的时候,学习速率会非常缓慢。
2. 过度拟合(overfitting)/过度训练(overtraining)
如何理解过度拟合呢?
打一个简单的比方:你很喜欢吃土豆丝这道菜,所以妈妈会你如何把土豆去皮切成丝。你每天很勤奋的练习,最后可以切出粗细均匀的完美的土豆丝了。
然后有一天你吃腻了土豆丝,想吃胡萝卜。
...
手写数字识别MNIST(python3)
写在前面
教材链接:Neural Networks and Deep Learning
本机系统:macOS Catalina 10.15.6,python3.8.3
本博客源代码:handwritten_digit_recognition_python3
python2(也是教材官方的github库):neural-networks-and-deep-learning
需要的第三方库:
123import numpy as npimport gzipimport pickle
一、数据导入
在mnist_loader.py包中,将data目录下的mnist.pkl.gz压缩包解压缩,并以一定的格式传递给python进行计算。
123456789def load_data(): ''' 将MNIST文件解压并打开,存储到变量中。 :return: ''' f = gzip.open('data/mnist.pkl.gz', 'rb') ...