人工智能初学者MNIST的一些理解

初学不易,如有错误,承蒙指出,感激不尽。
下面是一些我自己对mnist的理解。

#!/usr/bin/env python

!/usr/bin/env python这种用法是为了防止操作系统用户没有将python装在默认的/usr/bin路径里。当系统看到这一行的时候,首先会到env设置里查找python的安装路径,再调用对应路径下的解释器程序完成操作。相比较#!/usr/bin/python,可以在环境目录里面寻找python环境。

#_*_ coding: utf-8 _*_

Python中需输入此行代码才能在注释中写中文。

import tensorflow as tf

导入tensorflow程序包

from tensorflow.examples.tutorials.mnist import input_data

导入tensorflow程序包中的input_data,如果没有这一句,需在以后每次用到input_data的时候都加上类名的限定,详情见:https://blog.csdn.net/lcczzu/article/details/91413240

定义神经网络模型的评估部分

def compute_accuracy(test_xs, test_ys):

定义函数,def为定义函数,紧接着是函数名,括号内为函数的参数,内部为函数的具体功能实现代码,如果想要函数有返回值,在expressions中的代码中用return返回。

        global prediction

使用全局变量prediction,方便在不同的函数中调取变量prediction

y_pre = sess.run(prediction, feed_dict={xs: test_xs, keep_prob: 1})

获得预测值y_pre
sess.run()函数原型为tf.session.run(fetches,feed_dict=None),函数功能为执行操作并计算获取中的张量。Fetches指获取:单个图形元素或图形元素列表。feed_dict指将图形元素映射到值的字典。返回值:如果fetches是单个图形元素,则为单个值;如果fetches是列表,则为值列表。
keep_prob: 1,意思是每个元素被保留的概率,那么keep_prob:1就是所有元素全部保留的意思。一般在大量数据训练时,为了防止过拟合,添加Dropout层,设置一个0~1之间的小数。Dropout类似于性别在生物进化中的角色,物种为了使适应不断变化的环境,性别的出现有效的阻止了过拟合,即避免环境改变时物种可能面临的灭亡。更直观个人理解就是: droput 取50%的时候,每次训练都随机的discard 50%的隐含层的节点来进行训练,这样可以防止每次都是所有的特征选择器共同作用,一直放大或者缩小某些特征,在样本数据少的情况下很容易过拟合,并且泛化能力也很弱,所以才用dropout这种方法来实现能很好的避免训练过程中出现的这些问题。注意,在测试过程中采用的是全连接。

correct_prediction =tf.equal(tf.argmax(y_pre, 1), tf.argmax(test_ys, 1))

判断预测值y和真实值y_中最大数的索引是否一致,y_pre的值为1-10概率, 返回值为bool序列bool序列是只有元素0,1的一个序列,1代表true,0代表false。
#首先,tf.equal用于判断参数是否相等,不是整体判断,而是逐个判断,如果相等就是True也就是1,不相等,就是False也就是0。由于是逐个元素判断,所以x,y 的维度要一致。例:

其次,tf.equal中要对比的是(tf.argmax(y_pre, 1)和 tf.argmax(test_ys, 1),tf.argmax是

accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

tf.reduce_mean()函数用于计算张量tensor沿着指定的数轴(tensor的某一维度)上的平均值,主要用作降维或者计算tensor(图像)的平均值。
tf.reduce_mean(
input_tensor,
axis=None,
keep_dims=False,
name=None,
reduction_indices=None)
input_tensor: 输入的待降维的tensor
axis: 指定的轴,如果不指定,则计算所有元素的均值
keep_dims:是否降维度,默认False。设置为True,输出的结果保持输入tensor的形状,设置为False,输出结果会降低维度
Name:操作的名称
reduction_indices:在以前版本中用来指定轴,已弃用
例子:

import tensorflow as tf
x = [[1,2,3],
[4,5,6]]
y = tf.cast(x, tf.float32)
mean_all = tf.reduce_mean(y)
mean_0 = tf.reduce_mean(y, axis=0)
mean_1 = tf.reduce_mean(y, axis=1)
with tf.Session() as sess:
m_a,m_0,m_1 = sess.run([mean_all, mean_0, mean_1])
print(m_a)
print(m_0)
print(m_1)

运行结果:

3.5
[2.5 3.5 4.5]
[2 5]

tf.cast()函数用于执行 tensorflow 中张量数据类型转换,比如读入的图片如果是int8类型的,一般在要在训练前把图像的数据格式转换为float32。


cast定义:cast(x, dtype, name=None)
其中,x为待转换的数据,dtype为目标数据类型,name为可选参数,定义操作的名称。
定义准确率的计算

result = sess.run(accuracy)return result

计算准确率,原理是当在上面计算平均值计算的是bool值的平均值,对于所对比的任意两个张量,得到的bool值为一个含有0(false)和1(true)的张量,计算该张量元素的平均值,可以得到1在整个张量所有元素中所占的比例,这个比例就是准确率。

mnist = input_data.read_data_sets('C:/Users/Administrator/MNIST_data/', one_hot=True)

下载mnist数据,本程序对应的mnist数据集已经手动下载完成,上面位置为数据集在本计算机的存储位置。

权重参数初始化

def weight_variable(shape):
initial = tf.truncated_normal(shape, stddev=0.1)

截断的正态分布,标准差stddev为0.1
truncated_normal(
shape,
mean=0.0,
stddev=1.0,
dtype=tf.float32,
seed=None,
name=None
)
产生截断正态分布随机数,取值范围为 [ mean - 2 * stddev, mean + 2 * stddev ]。

例:

return tf.Variable(initial)tf.Variable()

Variable是tensorflow的变量节点,通过Variable方法创建,并且需要传递初始值。在使用前需要通过tensorflow的初始化方法进行初始化W =tf.Variable(initial_value=tf.zeros([9, 5]),
初始值,必填,张量或可以转换为张量的Python对象。初始值必须有指定一个形状,除非validate_shape设置为False。trainable=True, 如果True,则默认值也将变量添加到图形中集合GraphKeys.TRAINABLE_VARIABLES。这个集合用作“Optimizer”类使用的默认变量列表collections=None, 图表集合键的列表。新的变量被添加到这些集合。默认为[GraphKeys.GLOBAL_VARIABLES]
validate_shape=True,
#如果False,允许变量用初始化未知形状的值。如果“True”,默认的形状initial_value必须是已知的。
caching_device=None
可选设备字符串,描述变量的位置应该被缓存以供阅读。默认为变量的设备。如果不是“None”,则缓存在另一个设备上。
典型的用途是缓存在使用变量 的Ops所在的设备上进行重复数据删除复制Switch和其他条件语句。
name=‘W’,
变量的可选名称。默认为“Variable”并获取自动去重(Variable_1,Variable_2…)。
variable_def=None,
VariableDef协议缓冲区。如果不是“无”,则重新创建变量对象及其内容,引用变量的节点在图中,必须已经存在。
图形没有改变。variable_def和其他参数是互斥的。
dtype=tf.float32,
如果设置,initial_value将被转换为给定的类型。如果None',数据类型将被保存 (如果initial_value是一个张量),或者“convert_to_tensor”来决定。 expected_shape=None, 张量的Shape。如果设置,initial_value需要符合这个形状。 import_scope=None 可选的字符串。名称范围添加到Variable.`仅在从协议缓冲区初始化时使用。)

偏置参数初始化

def bias_variable(shape):
initial = tf.constant(0.1, shape=shape)

在TensorFlow API中创建常量的函数原型如下所示:
tf.constant(
value,
dtype=None,
shape=None,
name=‘Const’,
verify_shape=False
)
第一个value值是必须的,可以是值,也可以是列表。Shape=shape表示与上面的权重张量形状相同,value=0.1表示这个常量函数原型为元素全为0.1的常量张量。

定义卷积层

def conv2d(x, W):

conv2d函数介绍:tf.nn.conv2d(input, w, strides, padding)
其中 input 为输入,格式为[batch, height, width, channels], 分别为【输入的批次数量、图像的高(行数)、宽(列数)、通道(彩色为3,灰色为1)】【w 为卷积矩阵,二维、分别为[高,宽]】;strides 为滑动窗口尺寸,分别为[1, height, width, 1]([batch, height, width, channels]), height, width就是图像的高度和宽度,batch和channels在卷积层中通常设为1。通常 strides[0]=strides[3]=1,因为一般不会在一个个图像,一个个通道之间滑动padding 为扩展方式,有两种 vaild 和 same

return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')

tf.nn.conv2d是tensorflow里面定义卷积神经网络的一种函数,是一种搭建卷积神经网络比较重要的方法。
tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)
除去name参数用以指定该操作的name,与方法有关的一共五个参数:
第一个参数input:指需要做卷积的输入图像,它要求是一个Tensor,具有[batch, in_height, in_width, in_channels]这样的shape,具体含义是[训练时一个batch的图片数量, 图片高度, 图片宽度, 图像通道数],注意这是一个4维的Tensor,要求类型为float32和float64其中之一
第二个参数filter:相当于CNN中的卷积核,它要求是一个Tensor,具有[filter_height, filter_width, in_channels, out_channels]这样的shape,具体含义是[卷积核的高度,卷积核的宽度,图像通道数,卷积核个数],要求类型与参数input相同,有一个地方需要注意,第三维in_channels,就是参数input的第四维
第三个参数strides:卷积时在图像每一维的步长,这是一个一维的向量,长度4
第四个参数padding:string类型的量,只能是"SAME","VALID"其中之一,这个值决定了不同的卷积方式(后面会介绍)
第五个参数:use_cudnn_on_gpu:bool类型,是否使用cudnn加速,默认为true,结果返回一个Tensor,这个输出,就是我们常说的feature map,shape仍然是[batch, height, width, channels]这种形式。
(这种对于TOFD图像来说应该是通道数均为1)

定义池化

def max_pool_2x2(x):
return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')

tf.nn.max_pool(value, ksize, strides, padding, name=None)
参数是四个,和卷积很类似:
第一个参数value:需要池化的输入,一般池化层接在卷积层后面,所以输入通常是feature map,依然是[batch, height, width, channels]这样的shape
第二个参数ksize:池化窗口的大小,取一个四维向量,一般是[1, height, width, 1],因为我们不想在batch和channels上做池化,所以这两个维度设为了1
第三个参数strides:和卷积类似,窗口在每一个维度上滑动的步长,一般也是[1, stride,stride, 1]
第四个参数padding:和卷积类似,可以取’VALID’ 或者’SAME’
返回一个Tensor,类型不变,shape仍然是[batch, height, width, channels]这种形式
“”"
max_pool(x,ksize,strides,padding)参数含义
x:input
ksize:filter,滤波器大小22
strides:步长,2
2,表示filter窗口每次水平移动2格,每次垂直移动2格
padding:填充方式,补零
conv2d(x,W,strides=[1,1,1,1],padding=‘SAME’)参数含义与上述类似
x:input
W:filter,滤波器大小
strides:步长,1*1,表示filter窗口每次水平移动1格,每次垂直移动1格
padding:填充方式,补零(‘SAME’)
“”"

输入输出数据的placeholder

xs = tf.placeholder(tf.float32, [None, 784])
ys = tf.placeholder(tf.float32, [None, 10])

tf.placeholder(
dtype,
shape=None,
name=None
)
dtype:数据类型。常用的是tf.float32,tf.float64等数值类型
shape:数据形状。默认是None,就是一维值,也可以是多维(比如[2,3], [None, 3]表示列是3,行不定)
name:名称

dropout的比例

keep_prob = tf.placeholder(tf.float32)

对数据进行重新排列,形成图像

x_image = tf.reshape(xs, [-1, 28, 28, 1])

对数据进行重新排列,形成图像
tf.reshape(tensor, shape, name=None)
第1个参数为被调整维度的张量。
第2个参数为要调整为的形状。
返回一个shape形状的新tensor
注意shape里最多有一个维度的值可以填写为-1,表示自动计算此维度。
详情见:http://www.voidcn.com/article/p-quleiusw-bd.html
这里的-1表示还不知道图片的张数,但是计算机可以根据后面对于需要转化成的张量形状自动计算图片的张数。后面的几个数字依此对应,每张图片有的张量数为28,每个张量的形状为28行1列。

print(x_image.shape)

卷积层一
卷积核大小为5*5,in_size为1,即图像的厚度,如果是彩色,则为3,32是out_size,输出的大小为32个卷积和(滤波器)(32个feature map特征图)

W_conv1 = weight_variable([5, 5, 1, 32])

定义bias,它的大小是32个长度,因此我们传入它的shape为[32]

b_conv1 = bias_variable([32])

定义好Weight 和 bias,我们就可以定义卷积神经网络的,第一个卷积层 ReLU操作,输出大小为282832。h_conv1=conv2d(x_image,W_conv1)+b_conv1,同时我们对h_conv1进行非线性处理,也就是激活函数来处理,这里我们用到的是tf.nn.relu(修正线性单元)来处理,需要注意的是,因为采用了SAME的padding方式,输出图片的大小没有变化依然是2828,只是厚度变厚了,因此,现在的输出变成了2828*32。 tf.nn.relu这个函数的作用是计算激活函数 relu,即 max(features, 0)。将大于0的保持不变,小于0的数置为0

h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)

Pooling操作,输出大小为141432

h_pool1 = max_pool_2x2(h_conv1)

卷积层二
卷积核为5*5,in_size为32,即图像的厚度,64是out_size,输出的大小

W_conv2 = weight_variable([5, 5, 32, 64])
b_conv2 = bias_variable([64])

ReLU操作,输出大小为141464

h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)

Pooling操作,输出大小为7764

h_pool2 = max_pool_2x2(h_conv2)

以上操作包括两个卷积层,两个池化层,若想要用到TOFD图像识别当中,只需要依据卷积和池化的规律,修改其中的参数,值得注意的是,每经过一次池化,图像的宽度和高度均减小为原来的一半(原理可查link
全连接层一

W_fc1 = weight_variable([7 * 7 * 64, 1024])
b_fc1 = bias_variable([1024])

输入数据变换

h_pool2_flat = tf.reshape(h_pool2, [-1, 7 * 7 * 64])

整形成mn,列n为77*64

进行全连接操作
此处tf.matmul为矩阵相乘计算函数,h_pool2_flat与W_fc1相乘之后与b_fc1形状相同。

h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)

防止过拟合,dropout

h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)

全连接层一将图像7764转化成了一个有1024个参数的张量

全连接层二

W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])

预测Softmax的含义:Softmax简单的说就是把一个N*1的向量归一化为(0,1)之间的值,由于其中采用指数运算,使得向量中数值较大的量特征更加明显。见https://blog.csdn.net/wgj99991111/article/details/83586508,输出属于每一个数的概率。prediction =tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)

全连接层二将1024元素张量转化成了一个有10元素张量.
计算loss,cross_entropy表示交叉熵
cross entropy = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction), reduction_indices=[1]))
交叉熵计算方法:tf.reduce_mean表示计算平均值,tf.reduce_sum表示计算和,tf.log(prediction)计算prediction的自然对数,如果是张量,返回值与输入值形式相同。ys与之相乘得到一个10*10的矩阵,经过reduction_indices=[1]压缩成一行,例子如https://blog.csdn.net/dpengwang/article/details/95733168,
神经网络训练tf.train.AdamOptimizer()函数是Adam优化算法:是一个寻找全局最优点的优化算法,引入了二次方梯度校正。参数0.001是学习速率,在这里实际上理解为准确率精确位数。minimize表示使括号内参数最小。详见https://www.cnblogs.com/tingtin/p/12558615.html,https://blog.csdn.net/TeFuirnever/article/details/88933368
train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy) # 0.0001

定义Session

sess = tf.Session()
init = tf.global_variables_initializer()

sess.run()函数原型为tf.session.run(fetches,feed_dict=None),函数功能为执行操作并计算获取中的张量。Fetches指获取:单个图形元素或图形元素列表。feed_dict指将图形元素映射到值的字典。返回值:如果fetches是单个图形元素,则为单个值;如果fetches是列表,则为值列表。
tf.global_variable_initializer则是开始执行每个variable里的initializer. tensorflow的机制就是定义get_variable的时候仅仅是定义,并没有实际执行初始化,得等你确定初始化了,也就是global_variable_initializer了才真正给全局变量赋值

执行初始化

sess.run(init)

进行训练迭代

for i in range(1000):

取出mnist数据集中的100个数据

   batch_xs, batch_ys = mnist.train.next_batch(50)

100 mnist.train.next_batch是专门用于由 tensorflow提供的MNIST教程的函数。它的工作原理是在开始时将训练图像和标签对随机化,并在每次调用该函数时选择每个随后的batch_size张图像。一旦到达末尾,图像标签对将再次随机分配,并重复该过程。仅在使用所有可用对后,才重新组合和重复整个数据集。50表示每次输送的图像标签对数量。
执行训练过程并传入真实数据

  sess.run(train_step, feed_dict={xs: batch_xs, ys: batch_ys, keep_prob: 0.5})if i % 100 == 0:print(compute_accuracy(mnist.test.images, mnist.test.labels))

卷积神经网络是为了实现特征的提取,池化是特征降维,压缩数据和参数的数量,减小过拟合,提高模型的容错性。全连接层是可以理解为多分类神经网络,通过softmax函数得到最终的输出。网上可以查到全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。在实际使用中,全连接层可由卷积操作实现:对前层是全连接的全连接层可以转化为卷积核为1x1的卷积;而前层是卷积层的全连接层可以转化为卷积核为hxw的全局卷积,h和w分别为前层卷积结果的高和宽。https://blog.csdn.net/weixin_39568744/article/details/82250663

完整代码如下:

#!/usr/bin/env python
#_*_ coding: utf-8 _*_
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
#定义神经网络模型的评估部分
def compute_accuracy(test_xs, test_ys):# 使用全局变量predictionglobal prediction# 获得预测值y_pre,生成预测值,也就是概率,即每个数字的概率y_pre = sess.run(prediction, feed_dict={xs: test_xs, keep_prob: 1})# 判断预测值y和真实值y_中最大数的索引是否一致,y_pre的值为1-10概率, 返回值为bool序列correct_prediction = tf.equal(tf.argmax(y_pre, 1), tf.argmax(test_ys, 1))# 定义准确率的计算accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))  # tf.cast将bool转换为float32# 计算准确率result = sess.run(accuracy)return result
#下载mnist数据
mnist = input_data.read_data_sets('C:/Users/Administrator/MNIST_data/', one_hot=True)
#权重参数初始化
def weight_variable(shape):initial = tf.truncated_normal(shape, stddev=0.1)  # 截断的正态分布,标准差stddevreturn tf.Variable(initial)
#偏置参数初始化
def bias_variable(shape):initial = tf.constant(0.1, shape=shape)return tf.Variable(initial)
#定义卷积层
def conv2d(x, W):# stride的四个参数:[batch, height, width, channels], [batch_size, image_rows, image_cols, number_of_colors]# height, width就是图像的高度和宽度,batch和channels在卷积层中通常设为1return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
def max_pool_2x2(x):return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')"""max_pool(x,ksize,strides,padding)参数含义x:inputksize:filter,滤波器大小2*2strides:步长,2*2,表示filter窗口每次水平移动2格,每次垂直移动2格padding:填充方式,补零conv2d(x,W,strides=[1,1,1,1],padding='SAME')参数含义与上述类似x:inputW:filter,滤波器大小strides:步长,1*1,表示filter窗口每次水平移动1格,每次垂直移动1格padding:填充方式,补零('SAME')"""
#输入输出数据的placeholder
xs = tf.placeholder(tf.float32, [None, 784])
ys = tf.placeholder(tf.float32, [None, 10])
#dropout的比例
keep_prob = tf.placeholder(tf.float32)
#对数据进行重新排列,形成图像
x_image = tf.reshape(xs, [-1, 28, 28, 1])  # -1, 28, 28, 1
print(x_image.shape)
#卷积层一
#patch为5*5,in_size为1,即图像的厚度,如果是彩色,则为3,32是out_size,输出的大小-》32个卷积和(滤波器)
W_conv1 = weight_variable([5, 5, 1, 32])
b_conv1 = bias_variable([32])
#ReLU操作,输出大小为28*28*32
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
#Pooling操作,输出大小为14*14*32
h_pool1 = max_pool_2x2(h_conv1)
#卷积层二
#patch为5*5,in_size为32,即图像的厚度,64是out_size,输出的大小
W_conv2 = weight_variable([5, 5, 32, 64])
b_conv2 = bias_variable([64])
#ReLU操作,输出大小为14*14*64
h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
#Pooling操作,输出大小为7*7*64
h_pool2 = max_pool_2x2(h_conv2)
#全连接层一
W_fc1 = weight_variable([7 * 7 * 64, 1024])
b_fc1 = bias_variable([1024])
#输入数据变换
h_pool2_flat = tf.reshape(h_pool2, [-1, 7 * 7 * 64])  # 整形成m*n,列n为7*7*64
#进行全连接操作
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)  # tf.matmul
#防止过拟合,dropout
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)
#全连接层二
W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])
#预测
prediction = tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)
#计算loss
cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction), reduction_indices=[1]))
#神经网络训练
train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy)  # 0.0001
#定义Session
sess = tf.Session()
init = tf.global_variables_initializer()
#执行初始化
sess.run(init)
#进行训练迭代
for i in range(1000):# 取出mnist数据集中的100个数据batch_xs, batch_ys = mnist.train.next_batch(50)  # 100# 执行训练过程并传入真实数据sess.run(train_step, feed_dict={xs: batch_xs, ys: batch_ys, keep_prob: 0.5})if i % 100 == 0:print(compute_accuracy(mnist.test.images, mnist.test.labels))

MNIST:数据集下载link.

人工智能初学者MNIST的一些理解相关推荐

  1. 揭秘人工智能的大脑是如何理解世界的

    https://www.toutiao.com/a6659635744073581069/ 2019-02-19 17:07:56 人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新 ...

  2. 《人工智能》之《自然语言理解》

    教材:<人工智能及其应用>,蔡自兴等,2016m清华大学出版社(第5版) 参考书: <人工智能>之<自然语言理解> 1 自然语言理解概述 1.1 什么是自然语言处理 ...

  3. 人工智能AI、机器学习模型理解

    人工智能就是机器学习和大数据: 机器学习是什么:就是算法模型: 算法模型是什么: 俗地说,模型就是机器学习采用的算法."模型文件"一般说的是这个算法用到的各种输入.输出数据的值. ...

  4. 李飞飞:人工智能应用广泛 但场景理解不如2岁孩子

    "我看到了人工智能正在经历的历史时刻,那就是它已经走出实验室进入了产业应用阶段."全球人工智能领域著名华人专家李飞飞近日在北京接受新华社记者专访时说. 李飞飞是美国斯坦福大学人工智 ...

  5. 人工智能-----自然语言处理(NLP)基础理解

    人工智能的目标 - 推理 - 自动学习&调度 - 机器学习 - 自然语言处理 - 计算机视觉 - 机器人 - 通用智能 人工智能三大阶段 阶段 1--机器学习:智能系统使用一系列算法从经验中进 ...

  6. 人工智能实验---MNIST图像识别

    完整代码 https://github.com/ChenMingK/MNIST-recognization MNIST数据集压缩包在里面,配好环境后运行CNN.py即可 实验环境 PyCharm, t ...

  7. 人工智能专业术语的个人理解与总结(ML、DL、RL)

    前言 对于我这样的小白而言,听师兄师姐和老师们讲一些专业术语,总是感到疑惑,难以理解. 所以借此机会在这里进行简单总结. PS:个人感觉,总结内容时用自己的话讲出来,比较好. 内容 1.收敛: 假设模 ...

  8. 人工智能(AI)自然语言理解的问题

    在韩国首尔举行的围棋赛的中途,世界级顶尖围棋选手李世石和谷歌人工智能阿尔法狗的较量中,人工智能阿尔法狗走出了超越人类令人不安的神秘的一步棋. 在第37步,AlphaGo选择把一块黑色的棋子放在一开始就 ...

  9. 人工智能初学者指南:计算机视觉和图像识别

    让计算机'看'是一个不小的壮举.为了让机器像人或动物一样真正地观察世界,它依赖于计算机视觉和图像识别. 计算机视觉是条形码扫描仪能够"看到"UPC中的一堆条纹的能力.这也是Appl ...

最新文章

  1. Oracle快速复制表
  2. IE 8 中自定义自己的 Search Provider (搜索提供程序)
  3. HTML5与CSS3实战指南读书笔记之一些可能会有用的东西
  4. windows server2008R2故障转移群集
  5. [yii2] 实现所有action方法之前执行一段代码或者方法
  6. js客户端存储之Web存储
  7. STM32-独立看门狗原理-实验
  8. pointer-events:none
  9. 当我们在谈论单测时我们在谈论什么
  10. {0}占位替换指定位置数据
  11. Java程序员培训班有用吗?是否专业
  12. 微软xgp有哪些地区服务器,选择微软XGP订阅服务后,除了《荒野大镖客2》还有这些游戏值得玩...
  13. Java后端防止频繁请求、重复提交
  14. 【虚拟仿真】Unity3D中如何实现让3D模型显示在UI前面
  15. 报错:The JSP specification requires that an attribute name is preceded by whitespace
  16. Oracle SPARC T5-2 服务器:硬件规格
  17. Mac虚拟机VMware Fusion如何强制关机虚拟系统
  18. Java8新特性 Stream流常用方法
  19. 微信小程序分页加载列表
  20. 数据库性能测试-mysql篇

热门文章

  1. python创建一个空集合_Python中如何创建集合
  2. LaTex表格文本竖排的简单方法
  3. 手把手教你webpack3(15)插件之雪碧图插件(WEBPACK-SPRITESMITH配置简述)
  4. 关于Excel文件导入
  5. fastdfs-client使用
  6. java测试---用例(设计测试用例的基本要素、好处,六大设计测试用例的方法)
  7. python爬取壁纸教程01 --wallheaven
  8. IU8689 单声道145W/75W立体声D类音频功放IC产品介绍
  9. suite服务器文件,FILEminimizer Office,FILEminimizer Suite和FILEminimizer Server问题合集
  10. 数据库、实体-数据库设计原则-by小雨