纪念一下自己的第一个AI小程序,就跟用C++写下的第一个“Hello word”一样的激动。看了一段时间机器学习的理论知识,很多算法的数学推到确实一头雾水。但是鉴于研究生期间学习过《模式识别》以及做过掌纹识别的论文,对于学习AI除了数学推导部分,倒也容易上手。现在时常想,上学时的掌纹识别程序,完全可以用卷积神经网络再重新实现一遍。

       学习AI需要付出的时间还是巨大的,几乎占用了可以利用的一切业余时间。回顾这两个月,学习主要分以下几个途径:

1.电子书学习,《TensorFlow技术解析与实战 ,李嘉璇》,《机器学习_周志华》,《模式识别与机器学习--中文版》,《线性代数》等,这些书基本都是看了前几章,没有一本完全读完。

2.视频学习,主要是一些公开课,也是看了前几节。

3.论文阅读,论文现在了几十篇,但是仅看了五六篇。

4.代码研究方面,研究了FaceNet的源代码。下面的程序就是在研究FaceNet时,写的。

在接下来的学习,需要调整学习方式,针对某一个算法,机器学习方法,借助一下四种途径搞清楚:

1.电子书方面,要学完《模式识别与机器学习--中文版》,其他的可以挑选关键章节。

2.视频学习方面,在电子书阅读时,找相关的视频加深学习,这样也不至于看电子书太枯燥。

3.对于每个算法,简单的最好实现一遍,复杂的,找开源代码学习如何是如何使用的。

4.算法一般都是论文中首次提出,找到相关论文研究一番,看是为什么提出该方法,跟改进之前的算法,解决了什么问题,有什么好处。

5.开始参加一些公开AI大会,了解AI是如何落地的,了解各大巨头的研究。

对于学完的每个算法,要进行记录。

import os
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from scipy import misc

image = "/home/guest/work/FaceNet/facenet-master/src/Joseph_Kabila_0001.jpg"
img = misc.imread(os.path.expanduser(image), mode='RGB')
print(img.shape)
img = (img-127.5)*0.0078125
img_y = np.expand_dims(img, 0)
print(img_y.shape)
img_y = tf.cast(img_y, 'float32')

print("CONV1")
#CONV1:
k1 = tf.get_variable('weights1', [3,3,3//1,10],True) #Kernel
inp1 = tf.nn.conv2d(img_y, k1, [1, 1, 1, 1], 'VALID') # conv2d
#Relu
inp_channel1 = int(inp1.get_shape()[-1])
alpha1 = tf.get_variable('alpha1', inp_channel1)
inp1 = tf.nn.relu(inp1) + tf.multiply(alpha1, -tf.nn.relu(-inp1))
#Pooling
inp1 = tf.nn.max_pool(inp1, ksize=[1, 2, 2, 1],
                    strides=[1, 2, 2, 1],
                    padding='SAME',
                    name='pool1')

#CONV2:
k2 = tf.get_variable('weights2', [3,3,10//1,16],True) #Kernel
inp2 = tf.nn.conv2d(inp1, k2, [1, 1, 1, 1], 'VALID')
#Relu
inp_channel2 = int(inp2.get_shape()[-1])
alpha2 = tf.get_variable('alpha2', inp_channel2)
inp2 = tf.nn.relu(inp2) + tf.multiply(alpha2, -tf.nn.relu(-inp2))

#CONV3:
k3 = tf.get_variable('weights3', [3,3,16//1,32],True) #Kernel
inp3 = tf.nn.conv2d(inp2, k3, [1, 1, 1, 1], 'VALID')
#Relu
inp_channel3 = int(inp3.get_shape()[-1])
alpha3 = tf.get_variable('alpha3', inp_channel3)
inp3 = tf.nn.relu(inp3) + tf.multiply(alpha3, -tf.nn.relu(-inp3))

#CONV4:
k4 = tf.get_variable('weights4', [1,1,32//1,4],True) #Kernel
inp4 = tf.nn.conv2d(inp3, k4, [1, 1, 1, 1], 'VALID')

print("Conv output shape")
print(inp4.shape)
out_image_count = 4
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    out = sess.run(inp4)

    for i in range(out_image_count):
        print("out shape")
        print(out.shape)
        img1 = out[0,:,:,i]

        print("img1")
        print(img1.shape)
        print(img1)

        print("show")
        plt.imshow(img1)
        plt.show()

 

11-05 17:27