机器学习框架的一般套路
2017-07-17 10:58
155 查看
谈起机器学习,想必大家都或多或少地对其中多种复杂的框架有些吃不消吧,下面我们就来谈一下机器学习框架的一般套路:
1)获取数据集合;
2)声明数据和标签的类型,具体的是声明数据和标签的占位符操作,等到运行的时候我们再用feed_dict向其中填充真实数据;
3)声明需要计算的参数类型,具体是采用随机生成的方式,主要是生命其中的shape参数;
4)搭建模型同时进行loss函数的声明;
5)然后初始化所有变量,同时进行优化器的声明以及对loss函数的优化;
6)声明预测模型,并进行accuracy准确率的计算
6)多次迭代,填充数据
keras框架的搭建和tensorflow的基本思路差不多,只是进行了一些更高层的封装,具体大家可以多看看keras教程对比记忆,代码摘抄自tensorflow_code,里面有详细的各种tensorflow的代码,使用方法,推荐大家查看源码,具体我将起上传到博客上面,大家如果想看的话随时可以下载,希望大家都能在机器学习领域中探索到自己想要的东西,加油,我们一直在路上!
1)获取数据集合;
# Load the data # iris.data = [(Sepal Length, Sepal Width, Petal Length, Petal Width)] iris = datasets.load_iris() x_vals = np.array([[x[0], x[3]] for x in iris.data]) y_vals = np.array([1 if y==0 else -1 for y in iris.target]) # Split data into train/test sets train_indices = np.random.choice(len(x_vals), round(len(x_vals)*0.8), replace=False) test_indices = np.array(list(set(range(len(x_vals))) - set(train_indices))) x_vals_train = x_vals[train_indices] x_vals_test = x_vals[test_indices] y_vals_train = y_vals[train_indices] y_vals_test = y_vals[test_indices]
2)声明数据和标签的类型,具体的是声明数据和标签的占位符操作,等到运行的时候我们再用feed_dict向其中填充真实数据;
# Declare batch size batch_size = 100 # Initialize placeholders x_data = tf.placeholder(shape=[None, 2], dtype=tf.float32) y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32)
3)声明需要计算的参数类型,具体是采用随机生成的方式,主要是生命其中的shape参数;
# Create variables for linear regression A = tf.Variable(tf.random_normal(shape=[2,1])) b = tf.Variable(tf.random_normal(shape=[1,1]))
4)搭建模型同时进行loss函数的声明;
# Declare model operations model_output = tf.subtract(tf.matmul(x_data, A), b) # Declare vector L2 'norm' function squared l2_norm = tf.reduce_sum(tf.square(A)) # Declare loss function # = max(0, 1-pred*actual) + alpha * L2_norm(A)^2 # L2 regularization parameter, alpha alpha = tf.constant([0.01]) # Margin term in loss classification_term = tf.reduce_mean(tf.maximum(0., tf.subtract(1., tf.multiply(model_output, y_target)))) # Put terms together loss = tf.add(classification_term, tf.multiply(alpha, l2_norm))
5)然后初始化所有变量,同时进行优化器的声明以及对loss函数的优化;
# Declare optimizer my_opt = tf.train.GradientDescentOptimizer(0.01) train_step = my_opt.minimize(loss) # Initialize variables #init = tf.initialize_all_variables() init=tf.global_variables_initializer() sess.run(init)
6)声明预测模型,并进行accuracy准确率的计算
# Declare prediction function prediction = tf.sign(model_output) accuracy = tf.reduce_mean(tf.cast(tf.equal(prediction, y_target), tf.float32))
6)多次迭代,填充数据
# Training loop loss_vec = [] train_accuracy = [] test_accuracy = [] for i in range(500): rand_index = np.random.choice(len(x_vals_train), size=batch_size) rand_x = x_vals_train[rand_index] rand_y = np.transpose([y_vals_train[rand_index]]) sess.run(train_step, feed_dict={x_data: rand_x, y_target: rand_y}) temp_loss = sess.run(loss, feed_dict={x_data: rand_x, y_target: rand_y}) loss_vec.append(temp_loss) train_acc_temp = sess.run(accuracy, feed_dict={x_data: x_vals_train, y_target: np.transpose([y_vals_train])}) train_accuracy.append(train_acc_temp) test_acc_temp = sess.run(accuracy, feed_dict={x_data: x_vals_test, y_target: np.transpose([y_vals_test])}) test_accuracy.append(test_acc_temp) if (i+1)%100==0: print('Step #' + str(i+1) + ' A = ' + str(sess.run(A)) + ' b = ' + str(sess.run(b))) print('Loss = ' + str(temp_loss)) # Extract coefficients [[a1], [a2]] = sess.run(A) [[b]] = sess.run(b) slope = -a2/a1 y_intercept = b/a1 # Extract x1 and x2 vals x1_vals = [d[1] for d in x_vals] # Get best fit line best_fit = [] for i in x1_vals: best_fit.append(slope*i+y_intercept) # Separate I. setosa setosa_x = [d[1] for i,d in enumerate(x_vals) if y_vals[i]==1] setosa_y = [d[0] for i,d in enumerate(x_vals) if y_vals[i]==1] not_setosa_x = [d[1] for i,d in enumerate(x_vals) if y_vals[i]==-1] not_setosa_y = [d[0] for i,d in enumerate(x_vals) if y_vals[i]==-1] # Plot data and line plt.plot(setosa_x, setosa_y, 'o', label='I. setosa') plt.plot(not_setosa_x, not_setosa_y, 'x', label='Non-setosa') plt.plot(x1_vals, best_fit, 'r-', label='Linear Separator', linewidth=3) plt.ylim([0, 10]) plt.legend(loc='lower right') plt.title('Sepal Length vs Pedal Width') plt.xlabel('Pedal Width') plt.ylabel('Sepal Length') plt.show() # Plot train/test accuracies plt.plot(train_accuracy, 'k-', label='Training Accuracy') plt.plot(test_accuracy, 'r--', label='Test Accuracy') plt.title('Train and Test Set Accuracies') plt.xlabel('Generation') plt.ylabel('Accuracy') plt.legend(loc='lower right') plt.show() # Plot loss over time plt.plot(loss_vec, 'k-') plt.title('Loss per Generation') plt.xlabel('Generation') plt.ylabel('Loss') plt.show()
keras框架的搭建和tensorflow的基本思路差不多,只是进行了一些更高层的封装,具体大家可以多看看keras教程对比记忆,代码摘抄自tensorflow_code,里面有详细的各种tensorflow的代码,使用方法,推荐大家查看源码,具体我将起上传到博客上面,大家如果想看的话随时可以下载,希望大家都能在机器学习领域中探索到自己想要的东西,加油,我们一直在路上!
相关文章推荐
- H2O机器学习框架的学习
- 机器学习通用框架
- 最牛逼的开源机器学习框架,你知道几个
- 机器学习框架、库
- 最牛逼的开源机器学习框架,你知道几个
- [干货]Kaggle热门 | 用一个框架解决所有机器学习难题
- 一个框架解决几乎所有机器学习问题
- 深入Facebook机器学习部门:服务、模型、框架和硬件(贾扬清等HPCA论文)
- 干货丨大规模机器学习框架的四重境界(经典长文,值得收藏)
- Python开源机器学习框架:Scikit-learn六大功能,安装和运行Scikit-learn
- 分布式机器学习框架:CXXNet
- 免费教材丨第55期:Python机器学习实践指南、Tensorflow 实战Google深度学习框架
- Python开源机器学习框架:Scikit-learn入门指南
- 一个框架解决几乎所有机器学习问题
- 一个框架解决几乎所有机器学习问题
- 机器学习框架
- 自动化测试框架学习之四 --- 一般测试框架的分类?
- 深入Facebook机器学习部门:服务、模型、框架和硬件(贾扬清等HPCA论文)
- 最牛逼的开源机器学习框架,你知道几个
- 通用的机器学习框架