Building your first neural network in tensorflow(吴恩达)

0 说在前面 

在网易云课堂上学完了吴恩达老师的前两课(神经网络和深度学习,改善深层神经网络),不过总是觉得自己学的不是很扎实。正好借着“Building your first neural network in tensorflow”这个小项目,将自己之前学习知识进行一个总结。

1 基本思路

这一节主要对在TensorFlow中编写神经网络(深度学习)的基本思路进行总结,在下面的章节中就对主要思路进行展开叙述。

  • 导入相关数据集
  • 对训练集(training datasets)进行批量(batch)处理
  • 初始化参数:包括权重(weights)和偏差(biases)
  • 计算每层神经网络的线性函数值(Z)以及激励函数值(A)值
  • 计算损失函数(loss function)以及成本函数(cost function)
  • 选择合适的梯度下降法进行反向传播计算

2 数据集的处理

问题:一幅图像在计算机中是怎样存储的?

计算机和人脑有着千丝万缕的联系,当然也有截然不同的区别。就拿人脑和计算机存储一幅图像(这幅图像可能是你的另一个ta)来说,人脑可能不会十分准确的记住一幅图像的所有细节,人脑只会记住图像的大概轮廓以及某些特别的局部细节。当我们回忆那幅图像时,我们脑海中会漂浮它的大体样子,伴随而来的是心情愉悦,嘴角上扬;但是,计算机“记住”一幅图像就显得比较“直男”了,计算机可不管这么多,在它眼中,这幅图片就是0和1,因为它的存储机理就是以二进制的方式存储数据。当然,计算机是一个比较“有原则的直男”,它注重数据的存储顺序,因为0和1不同组合就可能完全创造出一幅截然不同的图像。一个庞大的包含0和1的数据矩阵就能够构造出一幅图像。

值得注意的是:一幅色彩斑斓的图像和一幅黑白图像又有很大的不同,前者在是由RGB三通道矩阵合成的,后者则是有单通道矩阵构成,这其实就相当于三张纸和一张纸的区别。

在神经网络的数据集处理中,我们需要对三通道图像进行“减肥”,需要将“三张纸”变成“一张纸”,这样方便对数据进行处理。变化的过程肯定是有一定的顺序和技巧的,因为计算机是一个“很有原则的直男”嘛。我们首先会找到能够盛放“三张纸”等数量的大矩阵,将三张纸按照一定的顺序,依次放到这个大矩阵中,只不过这个矩阵很“瘦”,只有一行或者一列。这一行或者一列就完完全全能够表示这一幅图像。

我们瘦身的时候要知道自己的体重,以及需要选择相应的健身器材。矩阵“瘦身”当然也要知道自己“几斤几两”和怎样瘦身的“健身器材”。下面就介绍我们会用到的两个辅助“器材”:

1.shape():获取矩阵的维度(dimension)
    比如A代表一个2行3列的矩阵,那么shape(A)的返回结果就是(2,3),2表示两行,3表示3列.如果A表示的是一幅RGB图像,那么A.shape[0]就表示获得A的行数,A.shape[1]表示获得A的列数,A.shape[2]表示获得A的深度(depth).也就是有“几张纸”.

2.reshape():表示将矩阵变成指定的维度(dimension)
    比如A代表一个2行3列的矩阵,但是我想把A变成一个1行6列的向量,可以这样写A = A.reshape(1,6)或者A = A.reshape(1,-1),其中-1表示根据原来矩阵的元素的个数自适应调整列的维度

如果“三张纸”的尺寸都是(68,68),那么我们所需“一张纸”的尺寸就是(68*68*3,1)。用代码的形式就是:

image = [...]  # A是一个68*68的深度为3的矩阵
image = image.reshape(image.shape[0]*image.shape[1]*image.shape[2],1)

这样就完成了“瘦身”!哈哈哈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章