本文为个人学习机器学习的一些入门级总结,若您是机器学习大神,可以直接留言点赞就好,嘿嘿。
要实现一个机器学习功能,以下要素必不可少:
数据
数据是机器学习的灵魂,万物的基石,女娲造人的泥土。可以说,所有的机器学习都是围绕着数据来进行的。数据的作用:
- 训练模型
- 验证模型有效性
- 分析模型
Tensorflow在学习是,需要先为数据站位(Placeholder),主要作用是预留出学习过程中数据所需要占用的系统资源(内存)。例如下边代码tensorflow处理MINIST数据集的预先占位:
mnist = read_data_sets(‘./‘,one_hot=True)
sess = tf.InteractiveSession()
x = tf.placeholder(“float”, [None, 784])
##省略与placeholder无关部分
for i in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
模型
模型表示采用什么样的模式训练数据,是神经网络(深度神经网络又分CNN、RNN等)、决策树算法、贝叶斯分类或者线性回归等等。这些模型在成熟的机器学习框架如Tensorflow或者Pytorch中都有实现(直接API调用)。例如下面例子是Tensorflow使用CNN训练的网络模型:
def cov2d(x, W):
return 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’)
#第一层卷积层
W_conv1 = weight_variable([5, 5, 1, 32])
b_conv1 = bias_variable([32])
x_image = tf.reshape(x, [-1,28,28,1])
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1)
#第二层
W_conv2 = weight_variable([5, 5, 32, 64])
b_conv2 = bias_variable([64])
h_conv2= tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
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])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)
#Dropout
keep_prob = tf.placeholder(“float”)
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)
#输出层
W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])
优化算法(Optimizer)
优化算法体现的是学习的方法。例如一个学生,你是希望他死记硬背还是寓教于乐。当然,这个比喻可能不是很恰当。其实就是告诉整个训练模型,每一步采用什么算法更新权值。一些常用的优化算法如梯度下降法、Adam、SGD等等,在处理不同的数据时各有优劣。
激活函数
主要用于对输出进行非线性化处理。一些比较复杂的数据,不是简单一条线,或者多次方程就能拟合出来的。而模型的形式往往是(F=wT+b)这种线性方程,所以需要使用激活函数对输出做非线性化处理。一些常见的非线性化函数包括Sigmoid、tanh、RELU、Softmax等等
总结
以上为机器学习的必不可少的构成单元,直接计算会涉及到非常多的公式推导。还好现成的机器学习框架帮大家封装好了以上实现,大家直接使用即可。说到底、回头看,机器学习其实就是数据工程。如何选择和预处理数据,并使用合理的模型进行训练,是机器学习成败的关键