PaddlePaddle炼丹初体验以及与TensorFlow求解四元一次方程的比较

〇、写在前面

最就在九月一日,百度来到了哈尔滨工业大学进行2020年校招,我有幸去参观了一下宣讲会,感慨良多,作为入门paddlepaddle的契机,我决定开启这个专栏——PaddlePaddle炼丹,学习一下国产深度学习框架,paddlepaddle。关于paddlepaddle的详情,欢迎查看这个博客——PaddlePaddle百度深度学习框架:等待你我一起划桨的AI大船

一、百度简介

在这里插入图片描述
百度(纳斯达克:BIDU),全球最大的中文搜索引擎及最大的中文网站,全球领先的人工智能公司,据说是中国第一,世界第二。“百度”二字,来自于八百年前南宋词人辛弃疾的一句词:众里寻他千百度,这句话描述了词人对理想的执着追求。

讲道理,不管BAT的问题,我很喜欢,什么是BAT?

BAT,B指百度、A指阿里巴巴、T指腾讯,是中国互联网公司百度公司(Baidu)、阿里巴巴集团(Alibaba)、腾讯公司(Tencent)三大互联网公司首字母的缩写。其中百度总部在北京、阿里巴巴总部在浙江省杭州市、腾讯总部在广东省深圳市。

二、百度飞桨

飞桨(PaddlePaddle)是国内唯一功能完备的端到端开源深度学习平台,致力于让深度学习技术的创新与应用更简单。

关于paddlepaddle的详情,欢迎查看这个博客——PaddlePaddle百度深度学习框架:等待你我一起划桨的AI大船

No 废话,直接 Action!!!

三、快速安装

  • PaddlePaddle支持使用pip快速安装, 执行下面的命令完成CPU版本的快速安装:
pip install -U paddlepaddle
  • 如需安装GPU版本的PaddlePaddle,执行下面的命令完成GPU版本的快速安装:
pip install -U paddlepaddle-gpu

手头的电脑还是 Windows 10 的系统,就直接使用pip进行安装了。

关于pip的详细信息,欢迎查看这个博客——python中pip安装、升级、升级指定的包
在这里插入图片描述
在这里插入图片描述
successfully 了,也就是安装成功了,新版本的 paddlepaddle 是基于 fluid 的。

四、快速使用

首先,需要导入 fluid 库

import paddle.fluid as fluid

Tensor操作

下面几个简单的案例,来了解一下 Fluid:

  1. 使用Fluid创建5个元素的一维数组,其中每个元素都为1
# 定义数组维度及数据类型,可以修改shape参数定义任意大小的数组
data = fluid.layers.ones(shape=[5], dtype='int64')
# 在CPU上执行运算
place = fluid.CPUPlace()
# 创建执行器
exe = fluid.Executor(place)
# 执行计算
ones_result = exe.run(fluid.default_main_program(),
                        # 获取数据data
                        fetch_list=[data],
                        return_numpy=True)
# 输出结果
print(ones_result[0])

在这里插入图片描述

  1. 使用Fluid将两个数组按位相加
# 调用 elementwise_op 将生成的一维数组按位相加
add = fluid.layers.elementwise_add(data,data)
# 定义运算场所
place = fluid.CPUPlace()
exe = fluid.Executor(place)
# 执行计算
add_result = exe.run(fluid.default_main_program(),
                 fetch_list=[add],
                 return_numpy=True)
# 输出结果
print (add_result[0])

在这里插入图片描述

  1. 使用Fluid转换数据类型
# 将一维整型数组,转换成float64类型
cast = fluid.layers.cast(x=data, dtype='float64')
# 定义运算场所执行计算
place = fluid.CPUPlace()
exe = fluid.Executor(place)
cast_result = exe.run(fluid.default_main_program(),
                 fetch_list=[cast],
                 return_numpy=True)
# 输出结果
print(cast_result[0])

在这里插入图片描述

五、线性回归模型

这是一个简单的线性回归模型,可以快速求解四元一次方程。

1)基于paddlepaddle的代码:

#加载库
import paddle.fluid as fluid
import numpy as np
import time

start = time.clock()

#生成数据
np.random.seed(0)
outputs = np.random.randint(5, size=(10, 4))
res = []
for i in range(10):
        # 假设方程式为 y=4a+6b+7c+2d
        y = 4*outputs[i][0]+6*outputs[i][1]+7*outputs[i][2]+2*outputs[i][3]
        res.append([y])

# 定义数据
train_data=np.array(outputs).astype('float32')
y_true = np.array(res).astype('float32')

#定义网络
x = fluid.layers.data(name="x",shape=[4],dtype='float32')
y = fluid.layers.data(name="y",shape=[1],dtype='float32')
y_predict = fluid.layers.fc(input=x,size=1,act=None)

#定义损失函数
cost = fluid.layers.square_error_cost(input=y_predict,label=y)
avg_cost = fluid.layers.mean(cost)

#定义优化方法
sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.05)
sgd_optimizer.minimize(avg_cost)

#参数初始化
cpu = fluid.CPUPlace()
exe = fluid.Executor(cpu)
exe.run(fluid.default_startup_program())

##开始训练,迭代500次
for i in range(500):
        outs = exe.run(
                feed={'x':train_data,'y':y_true},
                fetch_list=[y_predict.name,avg_cost.name])
        if i%50==0:
                print ('iter={:.0f},cost={}'.format(i,outs[1][0]))

#存储训练结果
params_dirname = "result"
fluid.io.save_inference_model(params_dirname, ['x'], [y_predict], exe)

elapsed = (time.clock() - start)
print("Training Time used:",elapsed)

# 开始预测
infer_exe = fluid.Executor(cpu)
inference_scope = fluid.Scope()

# 加载训练好的模型
with fluid.scope_guard(inference_scope):
        [inference_program, feed_target_names,
         fetch_targets] = fluid.io.load_inference_model(params_dirname, infer_exe)

# 生成测试数据
test = np.array([[[9],[5],[2],[10]]]).astype('float32')

# 进行预测
results = infer_exe.run(inference_program,
                         feed={"x": test},
                         fetch_list=fetch_targets)
# 给出题目为 【9,5,2,10】 输出y=4*9+6*5+7*2+10*2的值
print ("9a+5b+2c+10d={}".format(results[0][0]))

elapsed2 = (time.clock() - start)
print("Testing Time used:",elapsed2)

运行结果如下,花费时间为3.445s。
在这里插入图片描述
输出结果应是一个近似等于100的值,每次计算结果略有不同。
在这里插入图片描述

让我们把 paddlepaddle 与 TensorFlow 进行对比,可以发现两者的不同。

2)基于TensorFlow的代码:

# 训练代码
import tensorflow as tf
import numpy as np
import time

start = time.clock()

# 生成数据
np.random.seed(0)
outputs = np.random.randint(5, size=(10, 4))
res = []
for i in range(10):
    # 假设方程式为 y=4a+6b+7c+2d
    y = 4 * outputs[i][0] + 6 * outputs[i][1] + \
        7 * outputs[i][2] + 2 * outputs[i][3]
    res.append([y])

# 定义数据
train_data = np.array(outputs).astype('float32')
y_true = np.array(res).astype('float32')

# 占位符
x = tf.placeholder(tf.float32, shape=[None, 4], name='x')
y = tf.placeholder(tf.float32, shape=[None, 1], name='y')

# w 是要求的各个参数的权重,是目标输出,对应 t_w
w = tf.Variable(np.ones(4, dtype=np.float32).reshape((4, 1)), tf.float32)

# 实际输出数据
y_ = tf.matmul(x, w)

# 定义损失函数,均方误差
loss = tf.reduce_mean(tf.square(y - y_))

# 定义一个梯度下降算法来进行训练的优化器
optimizer = tf.train.GradientDescentOptimizer(0.05)

# 最小化代价函数
train = optimizer.minimize(loss)

# 初始化变量
init = tf.global_variables_initializer()

# 开始训练
with tf.Session() as sess:
    sess.run(init)
    for step in range(500):
        _, curr_loss = sess.run([train,loss], feed_dict={x: train_data, y: y_true})
        if step % 50 == 0:
            print("运行%d 次,loss=%s" % (step,curr_loss))
            #用saver 保存模型
            saver = tf.train.Saver()
            saver.save(sess, "model_data/model")
            elapsed = (time.clock() - start)
			print("Training Time used:",elapsed)

在这里插入图片描述
在这里插入图片描述

# 测试代码
import tensorflow as tf
import numpy as np

def main():
    sess = tf.InteractiveSession()
    # 加载模型
    saver = tf.train.import_meta_graph('model_data/model.meta')
    saver.restore(sess, 'model_data/model')
    graph = tf.get_default_graph()
	
	# 得到当前图中所有变量的名称
	# tensor_name_list = [tensor.name for tensor in graph.as_graph_def().node]
    # print(tensor_name_list)
    
	x = graph.get_tensor_by_name('x:0')
    pre_result = graph.get_tensor_by_name("MatMul:0")
    
    # 生成测试数据
    test = np.array([[9,5,2,10]]).astype('float32')

	# 进行预测
    pre_reload_out = sess.run(pre_result, feed_dict={x: test})
    print("9a+5b+2c+10d={}".format(pre_reload_out))

    # 关闭会话
    sess.close()

if __name__ == '__main__':
    main()

在这里插入图片描述
在这里插入图片描述
经过非严谨地对比,我们可以发现TensorFlow的代码量明显要多很多,无论是训练还是测试,但是paddlepaddle就相当的简约了,这也是paddlepaddle的一个大优势,但是TensorFlow的训练时间要更短一些,当然我的测试可能存在偶然性。。。

六、总结

总体来说,paddlepaddle给我的感觉体验确实要更好一些,对一些新入门的童鞋更友好,friendly,更容易上手一些,接下来会学习一下paddlepaddle的相关知识,写一写学习笔记,期待一下!!!😃

如果想要更多的资源,欢迎关注 @我是管小亮,文字强迫症MAX~

回复【福利】即可获取我为你准备的大礼,包括C++,编程四大件,NLP,深度学习等等的资料。

想看更多文(段)章(子),欢迎关注微信公众号「程序员管小亮」~

在这里插入图片描述

参考文章

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: PaddlePaddle是一个开源的深度学习框架,它提供了丰富的API和工具,可以帮助开发者快速构建和训练深度学习模型。如果想要从入门到炼丹,可以按照以下步骤进行: 1. 学习Python编程语言和基本的机器学习知识,了解深度学习的基本概念和原理。 2. 安装PaddlePaddle并学习如何使用它的API和工具,例如PaddleHub、PaddleSlim等。 3. 学习如何使用PaddlePaddle构建和训练深度学习模型,例如卷积神经网络、循环神经网络等。 4. 掌握如何使用PaddlePaddle进行模型优化和调试,例如模型压缩、量化等。 5. 学习如何使用PaddlePaddle进行模型部署和应用开发,例如使用Paddle Serving进行模型部署、使用Paddle Inference进行模型推理等。 总之,要想从入门到炼丹,需要不断学习和实践,掌握PaddlePaddle的各种功能和应用场景,才能成为一名优秀的深度学习工程师。 ### 回答2: PaddlePaddle是一个由百度公司开发的深度学习框架,使用它可以进行各种类型的机器学习和深度学习任务。下面介绍一些入门到炼丹的步骤。 1. 安装PaddlePaddle:第一步是安装PaddlePaddle,可以使用pip进行安装。安装完成后,可以使用import paddle进行导入。 2. 训练一个简单的模型:学习PaddlePaddle的基本操作步骤,最好的方式是从简单的模型开始。可以从官方文档中找到示例代码,例如使用PaddlePaddle进行图像分类或文本分类。 3. 提高模型的性能:针对真实的数据集,需要更多的技巧来提高模型的性能。可以尝试使用预训练模型或者进行数据增强等操作。 4. 网络架构设计:网络架构设计也是深度学习的一个重要环节。可以从现有的模型中获取灵感,或者通过尝试和训练不同的架构来提高性能。 5. 训练模型和优化:通过不断的训练和优化,可以使模型更好的适应数据集。可以使用不同的学习率,正则化方法和优化算法等进行优化。 6. 使用PaddlePaddle提供的应用:PaddlePaddle被广泛用于真实世界的应用,例如物体检测,人脸识别和自然语言处理等领域。可以使用PaddlePaddle提供的接口或者自己训练模型来解决实际问题。 7. 炼丹:当对机器学习和深度学习有了更深的理解之后,可以尝试自己设计和训练新的模型,炼丹就像一场冒险,挑战自己的创造力和技能。 总的来说,PaddlePaddle提供了非常多的资源和工具来帮助我们入门到炼丹。只有真正的动手尝试,才能够更好的理解深度学习和机器学习的本质。 ### 回答3: PaddlePaddle是一个深度学习平台,它使用Python语言编写并开源。它提供了一系列丰富的深度学习模型和算法,支持用户在各种架构和操作系统上快速训练和部署模型,同时还提供了一整套深度学习工具和可视化界面,帮助用户轻松地完成深度学习的各个环节。 对于入门用户来说,建议从PaddlePaddle的官网入手,官网提供了详细的入门教程和文档,从安装到训练,从模型选择到应用场景,都有相应的教程可供学习和参考。初学者可以从PaddlePaddle的基本概念、架构、数据结构等入手,了解深度学习的理论知识和PaddlePaddle工作原理,接着可以尝试用PaddlePaddle搭建自己的模型,并在实验数据上进行训练、调整参数、评估模型性能等,逐步提高自己的深度学习技能。 对于已经掌握基本知识的用户,可以继续深化研究PaddlePaddle的高级特性和应用场景。例如,可以掌握PaddlePaddle的自然语言处理和图像处理等领域的深度学习应用,学习如何为不同的任务选择合适的算法和模型,并针对实际问题进行模型调整和优化。 最后,对于希望进一步探索深度学习技术的用户,可以尝试进行炼丹实验,即在PaddlePaddle平台上实现深度学习的前沿研究,如GAN、CapsNet等模型的实现和应用。通过不断地深入研究和实践,不仅可以提高自己的技术水平,也有机会为PaddlePaddle平台的发展做出贡献,推动深度学习技术向更高层次的发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是管小亮

一口吃掉你的打赏,嗝~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值