-
参加AIOT在线训练营的同学们有任何疑问,可以在本论坛版块下发帖提问,专家会问大家一一答疑。大家可以同时参加论坛发帖活动,“【趁热打“帖”】”赢取奖品具体活动规则见链接: https://bbs.huaweicloud.com/forum/thread-17217-1-1.html发帖格式:标题:【趁热打“帖”】+问题概要正文:问题描述
-
请同学们将AIoT在线训练营课程案例分享/学习心得上传至此贴后截止时间:2020年1月10日我们将挑选5个优秀作品,获奖同学可以获得HCIA考试券1张获奖公布时间:2020年1月17日
-
请同学们将第3次作业截图上传至此贴下方截图要求:需要显示账号ID和相关重要内容截止时间:2020年1月6日获奖时间公布:2020年1月9日打卡福利:本次课程设置4次小作业同学们按照要求完成作业截图上传至论坛根据用户上传作业的时间进行排序使用代码生成3个随机数与之匹配的用户可以获得小礼品1份(荣耀手环5、荣耀运动蓝牙耳机、荣耀智能摄像机、指纹U盘)注:4次作业打卡的中奖用户不重复。重复上传内容的用户将被取消获奖资格!【打卡样例】作业提交要求:第3次作业上交2张截图,要求如下:1.notebook实例内,筛选出绍兴school区域水的相关数据(附自己华为云ID)2.100次迭代次数的均方误差变化趋势图(附自己华为云ID)到这里,你已经掌握如何如何利用AI推测销售数据啦
-
请同学们将第4次作业截图上传至此贴下方截图要求:需要显示账号ID和相关重要内容截止时间:2020年1月6日获奖时间公布:2020年1月9日打卡福利:本次课程设置4次小作业同学们按照要求完成作业截图上传至论坛根据用户上传作业的时间进行排序使用代码生成3个随机数与之匹配的用户可以获得小礼品1份(荣耀手环5、荣耀运动蓝牙耳机、荣耀智能摄像机、指纹U盘)注:4次作业打卡的中奖用户不重复。重复上传内容的用户将被取消获奖资格!【打卡样例】作业截图要求:第1张截图:运维反馈案例 post请求代码+开发板反馈调整结果放一起拍照第2张截图:AI智慧选址作业案例 1.notebook实例内,聚类输出结果截图。第3张截图:AI智慧选址作业案例 2.聚类结果可视化截图
-
请同学们将第1次作业截图上传至此贴下方截图要求:需要显示账号ID和相关重要内容截止时间:2019年12月31日获奖时间公布:2020年1月9日打卡福利:本次课程设置4次小作业同学们按照要求完成作业截图上传至论坛根据用户上传作业的时间进行排序使用代码生成3个随机数与之匹配的用户可以获得小礼品1份(荣耀手环5、荣耀运动蓝牙耳机、荣耀智能摄像机、指纹U盘)注:4次作业打卡的中奖用户不重复。重复上传内容的用户将被取消获奖资格!【打卡样例】作业提交要求:图中要有1、物联网平台中设备上报的数据;2、华为云ID。如有没有开发板,可以不参加第一次打卡,不影响后面课程的学习!
-
请同学们将第2次作业截图上传至此贴下方截图要求:需要显示账号ID和相关重要内容截止时间:2019年12月31日获奖时间公布:2020年1月9日打卡福利:本次课程设置4次小作业同学们按照要求完成作业截图上传至论坛根据用户上传作业的时间进行排序使用代码生成3个随机数与之匹配的用户可以获得小礼品1份(荣耀手环5、荣耀运动蓝牙耳机、荣耀智能摄像机、指纹U盘)注:4次作业打卡的中奖用户不重复。重复上传内容的用户将被取消获奖资格!【打卡样例】作业提交要求:第2次作业上交2张截图,要求如下:1.notebook实例内,同步OBS成功的截图2.DIS通道内监控图(截图中显示自己华为云ID)同学再接再厉,胜利就在前方!
-
-
实验素材,下载全部压缩包,解压part01即可。
-
从7天IoT在线训练营->7天IoT实战营->开发精英实战营,一路走来,确实学到了知识,也学会了实战,离精英还有距离。在这里发表一下自己对这个课程的看法,给学习的入门级小白一些经验,或者说培训老师们都清楚但不好意思说的。首先这些物联网课程是引领开发者入门华为物联网平台的课程,并不代表是纯门外汉上来就能学的,也不是培养全栈开发者的。需要有些基础的知识,也有一些问题不是课程的目标,可能答疑老师也不会回答。课程重点普及物联网知识,原理与发展,当故事听挺好的,不需要把这么基础的通讯工作原理都搞清楚(物联网专业出身的本来也都懂),主要是明白我需要用什么,整个物联网包括哪些东西,也就是课程中没有讲的相关知识也要开发者有一定基础。按照程序员的习惯直接列条目说明,不废话了。根据课程节奏:0、物联网的起源和发展,华为的地位,各种协议的历史等,了解故事更有存在感。1、华为IoT平台,OceanConnect的地位,层次划分,南向北向的概念,这些很重要,很容易理解;2、LiteOS物联网系统,也是华为物联网打天下的重要工具,对于嵌入式开发的同学不是难点,对非物联网专业的理解容易,掌握就难了。3、南向设备,主要是配合小熊派和工程Demo,要想掌握最好是搞过LiteOS ,至少MDK这样的工具。至少能根据教程配置和编译,因为是课程重点讲解的也很详细。课程的宗旨是让大家能使用Demo工程,不是训练大家写一个全新的工程。4、Profile和编解码是核心(其他IoT平台没有这一块),是教程重点。和南向设备怎么配套的,其实没有讲,但也要清楚,才能真正掌握。5、设备测试真实设备或虚拟设备,教程有详细讲解使用,这个工具很好。6、Web booster其实是一个北向应用,一个集成很好的web开发平台,只限于平台提供的功能,不能扩展开发者业务7、北向接口,和南向设备端一样重要,因为课程重点是物联网,是南向设备端,所以这方面只提供在线文档。8、Postman就是一个代替你写调用别人程序的通用程序,大家反应这方面教程没有讲清楚,这个课程宗旨有关,主要是培养南向设备端给点建议:北向应用 要有互联网开发经验(起码有网页或接口开发),详细点就是你开发过调用别人api的程序吗?你的程序被别人调用过吗?没有的话先找身边懂的人去学习一下,否则答疑老师也没法回答。南向设备 要有嵌入式开发经验,了解LiteOS或者熟悉MDK的,掌握起来就容易多了;之前对硬件没接触过,用C语言也没做过东西的,起码要熟悉一门编程语言,把Demo调通的基础上,再去肯相关知识。总之,这套课程虽然很短,只有7次课,但要都弄懂,需要掌握全面的知识,也就是一个全栈开发者,并不容易。
-
微话题 “如何利用GPU云资源训练自己的TensorFlow模型?”希望大家能够畅所欲言。如果大家有其他任何与TensorFlow模型相关的问题,也可以在本帖回复直接咨询云享专家江魁。=====【华为云·微话题】如何利用GPU云资源训练自己的TensorFlow模型? =====人工智能的火热,带来了一波学习TensorFlow深度学习框架的热潮。聊深度学习免不了要用GPU,但目前一块GPU费用较高,对于个人学习者和创业公司来讲的话,按需配置的云GPU服务器是一个不错的选项。华为云提供了按需配置的GPU服务器。云资源购买很方便,但GPU服务器的配置安装往往依赖一些Nvidia开发的组件,其文档晦涩难懂,很容易把新手拒之门外。幸运的是,在这个Docker流行的时代,有一些工作可以用容器化的服务来简化。Nvidia也开发了Nvidia-docker支持容器化。今天我们就来讨论一下如何利用GPU云资源训练自己的TensorFlow模型?期望看到大家精彩的评论:1、你是如何训练自己的TensorFlow模型?2、你在华为云服务器上训练自己的TensorFlow模型有没有碰到什么问题?如何解决的?3、你尝试着在GPU云资源部署你的Nvidia-docker时最大的收获是什么?4、你的TensorFlow训练的模型在用Restful API发布时有没有碰到什么问题?微话题活动:参与本次微话题讨论,有机会获得优质评论奖,赢取华为小天鹅蓝牙音箱。活动时间:2019年7月24日-8月7日参与方式:直接在本帖回复关于以上4个问题中的任意1个或多个问题的理解或评论获奖方式:活动结束后,将由云享专家 江魁 选取出2名优质评论奖,各送出华为小天鹅蓝牙音箱1个。评奖标准:回复话题数量和内容质量。优质评论:云的记忆:1、你是如何训练自己的TensorFlow模型?接触人工智能一年多,报了网课,前段时间第一次在华为提供的Modelarts AI实践营上 训练了 花草识别,猫狗识别 以及一个YOLO3模型。也是通过你们华为云第一次训练自己的第一个TensorFlow模型,算是入门,感谢华为。 2、你在华为云服务器上训练自己的TensorFlow模型有没有碰到什么问题? 记得第二期实践的时候,上传数据集到你们 对象存储的那个桶,通过你们那个 Browers传东西 传到 66%的时间就一直传不上去了,这个东西是个大的bug,需要修复,后面是通过另外一种命令行的方式上传的,后面多次遇到其他的一些大大小小的问题,但是都解决了,后面遇到再反馈 3、你尝试着在GPU云资源部署你的Nvidia-docker时最大的收获是什么? 没有实践过,通过你们Modelarts 学会做深度学习的时候,后面有计划这样去部署。因为感觉更自由。 4、你的TensorFlow训练的模型在用Restful API发布时有没有碰到什么问题? 还没遇到过。 buyi:利用TensorFlow,然后基于 CNN 数字识别的代码,采用简单的卷积神经网络模型,模型为: 输入 - 第一层卷积 - 第一层池化 - 第二层卷积 - 第二层池化 - 第一层全连接 - 第二层全连接。实现1—9的数字识别,根据ModelArts开发步骤,总结下列流程。1. 训练数据集下载上传2. CNN 模型构建3. 创建一个源文件 mnist_model.py123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778from __future__ import absolute_importfrom __future__ import divisionfrom __future__ import print_function import argparseimport sysimport tempfile from tensorflow.examples.tutorials.mnist import input_data import tensorflow as tf FLAGS = None def deepnn(x): with tf.name_scope('reshape'): x_image = tf.reshape(x, [-1, 28, 28, 1]) #第一层卷积层,卷积核为5*5,生成32个feature maps. with tf.name_scope('conv1'): W_conv1 = weight_variable([5, 5, 1, 32]) b_conv1 = bias_variable([32]) h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1) #激活函数采用relu # 第一层池化层,下采样2. with tf.name_scope('pool1'): h_pool1 = max_pool_2x2(h_conv1) # 第二层卷积层,卷积核为5*5,生成64个feature maps with tf.name_scope('conv2'): 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)#激活函数采用relu # 第二层池化层,下采样2. with tf.name_scope('pool2'): h_pool2 = max_pool_2x2(h_conv2) #第一层全连接层,将7x7x64个feature maps与1024个features全连接 with tf.name_scope('fc1'): 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层,训练时候随机让某些隐含层节点权重不工作 with tf.name_scope('dropout'): keep_prob = tf.placeholder(tf.float32) h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob) # 第二层全连接层,1024个features和10个features全连接 with tf.name_scope('fc2'): W_fc2 = weight_variable([1024, 10]) b_fc2 = bias_variable([10]) y_conv = tf.matmul(h_fc1_drop, W_fc2) + b_fc2 return y_conv, keep_prob #卷积def conv2d(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')#权重def weight_variable(shape): initial = tf.truncated_normal(shape, stddev=0.1) return tf.Variable(initial) #偏置def bias_variable(shape): initial = tf.constant(0.1, shape=shape) return tf.Variable(initial) 训练模型123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596from __future__ import absolute_importfrom __future__ import divisionfrom __future__ import print_function import argparseimport sysimport tempfile from tensorflow.examples.tutorials.mnist import input_data import tensorflow as tf import mnist_model FLAGS = None def main(_): mnist = input_data.read_data_sets(FLAGS.data_dir, one_hot=True) #输入变量 x = tf.placeholder(tf.float32, [None, 784]) #输出变量,数字是1-10 y_ = tf.placeholder(tf.float32, [None, 10]) # 构建网络,输入—>第一层卷积—>第一层池化—>第二层卷积—>第二层池化—>第一层全连接—>第二层全连接 y_conv, keep_prob = mnist_model.deepnn(x) #第一步对网络最后一层的输出做一个softmax,第二步将softmax输出和实际样本做一个交叉熵 #cross_entropy返回的是向量 with tf.name_scope('loss'): cross_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y_conv) #求cross_entropy向量的平均值得到交叉熵 cross_entropy = tf.reduce_mean(cross_entropy) #AdamOptimizer是Adam优化算法:一个寻找全局最优点的优化算法,引入二次方梯度校验 with tf.name_scope('adam_optimizer'): train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy) #在测试集上的精确度 with tf.name_scope('accuracy'): correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1)) correct_prediction = tf.cast(correct_prediction, tf.float32) accuracy = tf.reduce_mean(correct_prediction) #将神经网络图模型保存本地 graph_location = tempfile.mkdtemp() print('Saving graph to: %s' % graph_location) train_writer = tf.summary.FileWriter(graph_location) train_writer.add_graph(tf.get_default_graph()) #将训练的网络保存下来 saver = tf.train.Saver() with tf.Session() as sess: sess.run(tf.global_variables_initializer()) for i in range(5000): batch = mnist.train.next_batch(50) if i % 100 == 0: train_accuracy = accuracy.eval(feed_dict={ x: batch[0], y_: batch[1], keep_prob: 1.0})#输入是字典,表示tensorflow被feed的值 print('step %d, training accuracy %g' % (i, train_accuracy)) train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5}) test_accuracy = 0 for i in range(200): batch = mnist.test.next_batch(50) test_accuracy += accuracy.eval(feed_dict={x: batch[0], y_: batch[1], keep_prob: 1.0}) / 200; print('test accuracy %g' % test_accuracy) save_path = saver.save(sess,"mnist_cnn_model.ckpt") if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--data_dir', type=str, default='./', help='Directory for storing input data') FLAGS, unparsed = parser.parse_known_args() tf.app.run(main=main, argv=[sys.argv[0]] + unparsed) for i in range(200): batch = mnist.test.next_batch(50) test_accuracy += accuracy.eval(feed_dict={x: batch[0], y_: batch[1], keep_prob: 1.0}) / 200; print('test accuracy %g' % test_accuracy) save_path = saver.save(sess,"mnist_cnn_model.ckpt") if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--data_dir', type=str, default='./', help='Directory for storing input data') FLAGS, unparsed = parser.parse_known_args() tf.app.run(main=main, argv=[sys.argv[0]] + unparsed) 4. 然后执行5. 实现预测代码创建源文件 predict_mnist_model.py12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061from __future__ import absolute_importfrom __future__ import divisionfrom __future__ import print_function import argparseimport sysimport tempfile from tensorflow.examples.tutorials.mnist import input_data import tensorflow as tf import mnist_modelfrom PIL import Image, ImageFilter def load_data(argv): grayimage = Image.open(argv).convert('L') width = float(grayimage.size[0]) height = float(grayimage.size[1]) newImage = Image.new('L', (28, 28), (255)) if width > height: nheight = int(round((20.0/width*height),0)) if (nheigth == 0): nheigth = 1 img = grayimage.resize((20,nheight), Image.ANTIALIAS).filter(ImageFilter.SHARPEN) wtop = int(round(((28 - nheight)/2),0)) newImage.paste(img, (4, wtop)) else: nwidth = int(round((20.0/height*width),0)) if (nwidth == 0): nwidth = 1 img = grayimage.resize((nwidth,20), Image.ANTIALIAS).filter(ImageFilter.SHARPEN) wleft = int(round(((28 - nwidth)/2),0)) newImage.paste(img, (wleft, 4)) tv = list(newImage.getdata()) tva = [ (255-x)*1.0/255.0 for x in tv] return tva def main(argv): imvalue = load_data(argv) x = tf.placeholder(tf.float32, [None, 784]) y_ = tf.placeholder(tf.float32, [None, 10]) y_conv, keep_prob = mnist_model.deepnn(x) y_predict = tf.nn.softmax(y_conv) init_op = tf.global_variables_initializer() saver = tf.train.Saver() with tf.Session() as sess: sess.run(init_op) saver.restore(sess, "mnist_cnn_model.ckpt") prediction=tf.argmax(y_predict,1) predint = prediction.eval(feed_dict={x: [imvalue],keep_prob: 1.0}, session=sess) print (predint[0]) if __name__ == "__main__":main(sys.argv[1])这样就可进行一个简单的数字预测,利用率TensorFlow相关函数和简单神经网络。
-
随着机器学习和深度神经网络两个领域的迅速发展以及智能设备的普及,人脸识别技术正在经历前所未有的发展,关于人脸识别技术讨论从未停歇。目前,人脸识别精度已经超过人眼,同时大规模普及的软硬件基础条件也已具备,应用市场和领域需求很大,基于这项技术的市场发展和具体应用正呈现蓬勃发展态势。而人脸表情识别(facialexpression recognition, FER)作为人脸识别技术中的一个重要组成部分,近年来在人机交互、安全、机器人制造、自动化、医疗、通信和驾驶领域得到了广泛的关注,成为学术界和工业界的研究热点。本次,我们邀请了重磅级嘉宾-华为云MVP任如意老师,为我们介绍人脸识别中的表情识别的相关内容,并基于ModelArts AI一站式开发平台带领大家实操,解锁人脸情绪识别新技能! 除了有大咖分享我们还准备了精美的礼品书籍,移动电源,京东卡就等你来了! 直播安排• 人脸情绪识别背景介绍及简单综述• 情绪识别算法介绍• ModelArts的主要功能模块以及周边产品(如对象存储)介绍,及云化AI开发的优点• 实操演示(介绍包括数据上传、挂载、任务创建、代码环境准备、jupyter使用最佳实践、GPU使用心得等)• 介绍ModelArts的任务模式、模型发布等模块• Q&A 直播时间2019年8月27日20:00-21:00课程形式:线上直播互动 课程免费报名扫描海报二维码或点击https://developer.huaweicloud.com/signup/9f3cc214fe4d4e60afda718754d73b2d即可免费报名预约!提交报名后,华为云将于直播当天(8月27号 周二)通过邮件或短信向您推送在线直播观看地址,敬请关注。现场参与评论互动,若提问内容被导师翻牌,将有机会获得《极简人工智能》书籍1本!
-
测评人:殊麒(微信昵称)测评本地环境:mbp2018,MACOS 10.14.5,浏览器Google Chrome . 版本 75.0.3770.100(正式版本) (64 位)任务一:官网浏览浏览官网首页EI 企业智能相关,如下面三张截图。整体感觉内容分布归类略显凌乱且不统一,如下面两张截图上方和左侧导航栏中的分类,模糊且凌乱,看起来产品内容很多,但不够清晰,不利于快速定位找到入口。相对来说图三更加清晰明了一些:图1图2图3任务二:ModelArts首页浏览在ModelArts首页中,第一屏的描述文字建议修改,如图中红色框部分。原文表述不够清晰准确容易引起歧义,建议改为:按需使用付费或按周期时长付费可选。任务三:购买询价产品价格详情页,说明提示不够清晰醒目。在此详情页中,如图中红色标注部分,应该进行加粗或其他颜色醒目标注,同时,在此描述部分建议加上有关下方三种资源不同之处及可选的关系。否则容易造成误导是需要都选择还是可以三选一或三选二。任务四:创建两类物体标注在进行自动学习开始的体验时,创建密钥、下载时出现了问题,重复删除新建几次未能解决,具体为按文档说明创建密钥完成后,下载到的是个错误txt文件提示,内容见截图。后通过提交工单咨询的方式得以解决,解决办法是换了MAC自带的safari浏览器就可以了。然鹅,对于一个长期做技术开发调试的人来说,谷歌浏览器肯定是最常用的啊,这里需要华为的工程师排查一下兼容性问题。任务五:创建自动学习项目开始正式的自动学习项目,首先是创建物体检测项目,上传图片。在这个过程中遇到一点小小的困惑,就是这个存放图片的对话页面。最上方提示的是要选择文件夹,但实际上是要先新建一个OBS桶,然后在下面的OBS桶列表点进去,再创建文件夹。下面截图的对话页面红色箭头指示的几个地方,逻辑顺序与提示不够清晰合理自然。倒不如做成分步式判断,若用户没有桶和文件夹,就显示新建桶,桶的列表刷新完成后再提示进入建立文件夹。若用户已经有了文件夹,就直接把桶下面的文件夹列出来。之后是上传图片数据,传完之后下图这个同步数据源的按钮让我产生了疑惑,不清楚他的作用以及为什么放在这里,点了下似乎也没什么反应。个人建议,若是此步骤必须,就做出说明提示。若是可选,就没必要和添加、删除图片并列放置引起疑惑。添加完图片之后,整个页面没有明显的下一步提示操作,无所适从。经过仔细观察,发现在页面的右上角有个很小的“操作指导”链接,点进去才知道应该在每一个单个图片上点击进行标注。这对于新用户是在太不友好了,要么在页面有明确醒目的文字提示,要么把这个操作指导的按钮放到添加删除图片附近的位置,便于用户一眼就看到。完成两类物体标注后进入模型训练任务,这里又是一个对新用户不友好的地方。标注完所有图片之后,页面还是没有任何提示下一步的指向,于是只有在各个导航和功能按钮来回点击尝试,最后才发现要点击上方表示进度步骤的“模型训练”才可以。建议每一个阶段目标完成后可以进入下一个阶段的提示,做在统一醒目的位置进行提示,以免用户在不同的页面要进行不同的尝试。提交了训练任务之后,进度情况在当前页面没有动态指示,无聊之下返回自动学习首页乱点,才发现在这里的列表有进度显示。建议把进度也放到上一个提交训练任务成功的页面,接下来的问题又是类似,列表显示训练状态运行成功后,只看到了删除、链接和训练状态,没有其他提示。左侧的导航栏也看不到接下来要做什么,继续迷惑中。尝试之后才发现原来要点击项目名称进入项目里去部署。。。部署页面和训练页面类似的问题,没有在当前页面提示进行的进度,只是给了一个耐心等候部署中的提示。参考上面的经验,点击“返回自动学习”到外面的页面去看进度了。在模块左侧的导航菜单,发现了表示刚才模型部署的进度。部署完成后,上传图片进行测试,这时候我从百度随便找了3个汽车图片上传检测分析,有两张准确识别了,下面这张造型别致的家伙果然让模型困惑了,识别出来2种结果都有。任务六:创建数据集这个地方还是产生了迷惑,有两个入口可以创建,一个是在“数据标注”菜单下,一个是在“数据管理”-“数据集”菜单下。不清楚区别,索性两个都创建了。这里不知道平台原本是怎样设计考虑的,需要进一步明确。在创建数据集时弹出了“多版本控制”的提示,点击链接弹出了页面,只是有2个标题,还是要进一步点击链接才可以看到具体内容。就这么一会儿,我的浏览器标签已经开了七八个了。这种帮助文档提示与组织的方式不好,很容易点着点着就迷失了。就像下面这个帮助页面,除了红色框里这2个链接是有用的内容,其余的都是公共部分的导航,却占了大部分可视范围干扰阅读。像“多版本控制”这种帮助内容,建议可以做成一个页面里的锚点,减少用户在多个页面的跳转。任务七 进入数据集,标出车辆。这个任务还是比较简单,有了前面的经验,很快就操作完成了,没有更多可说的。任务八 请使用预置算法,创建训练任务。这个任务耽误的时间最多,选用不同的数据集(之前通过两个不同的入口创建了两个数据集),选择预置算法提交训练作业,都报告失败了。当然失败的进度依然不直观,要返回到主页面才能看到而不是在训练作业提交的页面里傻等。尝试看了下错误日志,不清楚原因。配置信息这些都截图放出来了,看是否有参考。最后,换了个预置算法,提交训练终于成功了。任务九 训练并部署上线模型。最后任务把训练成功的模型部署上线运行,有了前面的一些经验,相对就比较简单了。部署成功后,我把之前识别不明确那张图片再次拿来做预测,这次很准确地识别出来了,不知道是不是算法的问题。至此,任务A中的九个任务全部完成。总结在已经进行的测评体验中,有一种总体的感觉如下:1、华为云平台承载了太多的产品和服务,因此在分类展示和排列上不够清晰友好,容易让新用户陷入模糊。2、在有关服务套餐选择搭配、购买提示方面,提示文字的标注不够清晰突出,不能让新用户在众多的信息中一眼就注意到重要且需要注意的信息,造成用户选择的困扰。截取几个友商类似的入口页面参考说明百度在每一步的操作都有直观明了简洁的提示,减少用户判断选择的困惑,最常用的文档、视频、常见问题等也放在了最明显的位置方便使用。阿里在定价界面的规格描述比较清晰,能够比较直观地看出某个实例所能提供的服务及计费方式。3、在针对新用户的操作指引和提示方面,友好度不够,要改进提升的空间还很大,具体细节建议都在前面每个任务的测评描述里,此处不再赘述。总体来说,感觉华为云ModelArts平台的操作使用并不复杂,难度也不大。只是在用户指引、提示、帮助等布局设计和逻辑上较为欠缺,似乎是技术开发人员的思维,而不是站在客户角度的产品经理思维。PS:本人之前从未接触过华为云ModelArts平台,以及其他友商的类似产品,也没有过机器学习图像识别方面的任何使用与开发经验,可以说是一个纯粹的新入门用户视角进行使用测评。《完》
-
微话题 “如何利用GPU云资源训练自己的TensorFlow模型?”希望大家能够畅所欲言。如果大家有其他任何与TensorFlow模型相关的问题,也可以在本帖回复直接咨询云享专家江魁。=====【华为云·微话题】如何利用GPU云资源训练自己的TensorFlow模型? =====人工智能的火热,带来了一波学习TensorFlow深度学习框架的热潮。聊深度学习免不了要用GPU,但目前一块GPU费用较高,对于个人学习者和创业公司来讲的话,按需配置的云GPU服务器是一个不错的选项。华为云提供了按需配置的GPU服务器。云资源购买很方便,但GPU服务器的配置安装往往依赖一些Nvidia开发的组件,其文档晦涩难懂,很容易把新手拒之门外。幸运的是,在这个Docker流行的时代,有一些工作可以用容器化的服务来简化。Nvidia也开发了Nvidia-docker支持容器化。今天我们就来讨论一下如何利用GPU云资源训练自己的TensorFlow模型?期望看到大家精彩的评论:1、你是如何训练自己的TensorFlow模型?2、你在华为云服务器上训练自己的TensorFlow模型有没有碰到什么问题?如何解决的?3、你尝试着在GPU云资源部署你的Nvidia-docker时最大的收获是什么?4、你的TensorFlow训练的模型在用Restful API发布时有没有碰到什么问题?微话题活动:参与本次微话题讨论,有机会获得优质评论奖,赢取华为小天鹅蓝牙音箱。活动时间:2019年7月24日-8月7日参与方式:直接在本帖回复关于以上4个问题中的任意1个或多个问题的理解或评论获奖方式:活动结束后,将由云享专家 江魁 选取出2名优质评论奖,各送出华为小天鹅蓝牙音箱1个。评奖标准:回复话题数量和内容质量。
-
Tensorflow 2.0实现Fashion MNIST实验本指南会训练一个对服饰(例如运动鞋和衬衫)图像进行分类的神经网络模型。即使您不了解所有细节也没关系,本教程只是简要介绍了一个完整的 TensorFlow 程序,而且后续我们会详细介绍。本指南使用的是tf.keras,它是一种用于在 TensorFlow 中构建和训练模型的高阶 API。1. 导入相关库from __future__ import absolute_import, division, print_function, unicode_literals # TensorFlow and tf.keras import tensorflow as tf try: import tensorflow.keras as keras except: import tensorflow.python.keras as keras # Helper libraries import numpy as np import matplotlib.pyplot as plt print(tf.__version__)2. 导入MNIST数据集本指南使用Fashion MNIST数据集,其中包含 70000 张灰度图像,涵盖 10 个类别。以下图像显示了单件服饰在较低分辨率(28x28 像素)下的效果: Fashion MNIST spriteFashion MNIST 的作用是成为经典 MNIST 数据集的简易替换,后者通常用作计算机视觉机器学习程序的“Hello, World”入门数据集。MNIST数据集包含手写数字(0、1、2 等)的图像,这些图像的格式与我们在本教程中使用的服饰图像的格式相同。本指南使用 Fashion MNIST 实现多样化,并且它比常规 MNIST更具挑战性。这两个数据集都相对较小,用于验证某个算法能否如期正常运行。它们都是测试和调试代码的良好起点。我们将使用 60000 张图像训练网络,并使用 10000 张图像评估经过学习的网络分类图像的准确率。您可以从 TensorFlow 直接访问 Fashion MNIST,只需导入和加载数据即可:def load_data(): base = "file:///D:/datasets/fashion_mnist/" files = [ 'train-labels-idx1-ubyte.gz', 'train-images-idx3-ubyte.gz', 't10k-labels-idx1-ubyte.gz', 't10k-images-idx3-ubyte.gz' ] paths = [] for fname in files: paths.append(get_file(fname, origin=base + fname)) with gzip.open(paths[0], 'rb') as lbpath: y_train = np.frombuffer(lbpath.read(), np.uint8, offset=8) with gzip.open(paths[1], 'rb') as imgpath: x_train = np.frombuffer( imgpath.read(), np.uint8, offset=16).reshape(len(y_train), 28, 28) with gzip.open(paths[2], 'rb') as lbpath: y_test = np.frombuffer(lbpath.read(), np.uint8, offset=8) with gzip.open(paths[3], 'rb') as imgpath: x_test = np.frombuffer( imgpath.read(), np.uint8, offset=16).reshape(len(y_test), 28, 28) return (x_train, y_train), (x_test, y_test) # fashion_mnist = keras.datasets.fashion_mnist # (train_images, train_labels), (test_images, test_labels) = load_data()加载数据返回4个NumPy数组:train_images和train_labels数组是训练集,即模型用于学习的数据。测试集 test_images 和 test_labels 数组用于测试模型。图像为28x28的NumPy数组,像素值介于0到255之间。标签是整数数组,介于0到9之间。这些标签对应于图像代表的服饰所属的类别:LabelClass0T-shirt/top(T 恤衫/上衣)1Trouser(裤子)2Pullover (套衫)3Dress(裙子)4Coat(外套)5Sandal(凉鞋)6Shirt(衬衫)7Sneaker(运动鞋)8Bag(包包)9Ankle boot(踝靴)每个图像都映射到一个标签,由于类名不包含在数据集中,因此将它们存储在此处以便在绘制图像时使用:class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']3. 探索数据我们先探索数据集的格式,然后再训练模型。以下内容显示训练集中有 60000 张图像,每张图像都表示为 28x28 像素:train_images.shape (60000, 28, 28)同样,训练集中有60,000个标签:len(train_labels)60000每个标签都是0到9之间的整数:train_labelsarray([9, 0, 0, ..., 3, 0, 5], dtype=uint8)测试集中有10,000个图像。同样,每个图像表示为28 x 28像素:test_images.shape (10000, 28, 28)测试集包含10,000个图像标签:len(test_labels)100004. 预处理数据在训练网络之前必须对数据进行预处理。 如果您检查训练集中的第一个图像,您将看到像素值落在0到255的范围内:#预处理数据 plt.figure() plt.imshow(train_images[0]) plt.colorbar() plt.grid(False) plt.show() 我们将这些值缩小到 0 到 1 之间,然后将其馈送到神经网络模型。为此,将图像组件的数据类型从整数转换为浮点数,然后除以 255。以下是预处理图像的函数:务必要以相同的方式对训练集和测试集进行预处理:train_images = train_images / 255.0 test_images = test_images / 255.0为了验证数据的格式是否正确以及我们是否已准备好构建和训练网络,让我们显示训练集中的前25个图像,并在每个图像下方显示类名。plt.figure(figsize=(10,10)) for i in range(25): plt.subplot(5,5,i+1) plt.xticks([]) plt.yticks([]) plt.grid(False) plt.imshow(train_images[i], cmap=plt.cm.binary) plt.xlabel(class_names[train_labels[i]]) plt.show()png5. 构建模型构建神经网络需要配置模型的层,然后编译模型。5.1. 设置图层神经网络的基本构造块是层。层从馈送到其中的数据中提取表示结果。希望这些表示结果有助于解决手头问题。大部分深度学习都会把简单的层连在一起。大部分层(例如 tf.keras.layers.Dense)都具有在训练期间要学习的参数。model = keras.Sequential([ keras.layers.Flatten(input_shape=(28, 28)), keras.layers.Dense(128, activation='relu'), keras.layers.Dense(10, activation='softmax') ])该网络中的第一层tf.keras.layers.Flatten将图像的格式从二维数组(28 x 28像素)转换为一维数组(28 * 28 = 784像素))。可以将该层视为图像中像素未堆叠的行,并排列这些行。该层没有要学习的参数;它只改动数据的格式。在像素被展平之后,网络由两个tf.keras.layers.Dense层的序列组成。这些是密集连接或全连接的神经层。第一个Dense层有128个节点(或神经元)。第二个(也是最后一个)层是具有 10 个节点的 softmax 层,该层会返回一个具有 10 个概率得分的数组,这些得分的总和为 1。每个节点包含一个得分,表示当前图像属于 10 个类别中某一个的概率。5.2. 编译模型模型还需要再进行几项设置才可以开始训练。这些设置会添加到模型的编译步骤:损失函数:衡量模型在训练期间的准确率。我们希望尽可能缩小该函数,以“引导”模型朝着正确的方向优化。优化器:根据模型看到的数据及其损失函数更新模型的方式。度量标准:用于监控训练和测试步骤。以下示例使用准确率,即图像被正确分类的比例。model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])6. 训练模型训练神经网络模型需要以下步骤:将训练数据馈送到模型中,在本示例中为 train_images 和 train_labels 数组。模型学习将图像与标签相关联。我们要求模型对测试集进行预测,在本示例中为 test_images 数组。我们会验证预测结果是否与 test_labels 数组中的标签一致。要开始训练,请调用 model.fit 方法,使模型与训练数据“拟合”:model.fit(train_images, train_labels, epochs=5) Epoch 1/560000/60000 [==============================] - 5s 87us/step - loss: 0.5033 - acc: 0.8242......Epoch 5/560000/60000 [==============================] - 5s 88us/step - loss: 0.2941 - acc: 0.8917 在模型训练期间,系统会显示损失和准确率指标。该模型在训练数据上的准确率达到 0.88(即 88%)。7. 评估精度接下来,比较模型在测试数据集上的表现情况:test_loss, test_acc = model.evaluate(test_images, test_labels) print('\nTest accuracy:', test_acc) 输出:10000/10000 [==============================] - 1s 50us/stepTest accuracy: 0.8734结果表明,模型在测试数据集上的准确率略低于在训练数据集上的准确率。训练准确率和测试准确率之间的这种差异表示出现过拟合(overfitting)。如果机器学习模型在新数据上的表现不如在训练数据上的表现,也就是泛化性不好,就表示出现过拟合。8. 预测模型经过训练后,我们可以使用它对一些图像进行预测。predictions = model.predict(test_images) 在本示例中,模型已经预测了测试集中每张图像的标签。我们来看看第一个预测:predictions[0] 输出:array([6.2482708e-05, 2.4860196e-08, 9.7165821e-07, 4.7436039e-08, 2.0804382e-06, 1.3316551e-02, 9.8731316e-06, 3.4591161e-02, 1.2390658e-04, 9.5189297e-01], dtype=float32)预测结果是一个具有 10 个数字的数组,这些数字说明模型对于图像对应于 10 种不同服饰中每一个服饰的“confidence(置信度)”。我们可以看到哪个标签的置信度值最大:np.argmax(predictions[0]) 因此,模型非常确信这张图像是踝靴或属于 class_names[9]。我们可以检查测试标签以查看该预测是否正确:test_labels[0]我们可以将该预测绘制成图来查看全部 10 个通道def plot_image(i, predictions_array, true_label, img): predictions_array, true_label, img = predictions_array[i], true_label[i], img[i] plt.grid(False) plt.xticks([]) plt.yticks([]) plt.imshow(img, cmap=plt.cm.binary) predicted_label = np.argmax(predictions_array) if predicted_label == true_label: color = 'blue' else: color = 'red' plt.xlabel("{} {:2.0f}% ({})".format(class_names[predicted_label], 100*np.max(predictions_array), class_names[true_label]), color=color) def plot_value_array(i, predictions_array, true_label): predictions_array, true_label = predictions_array[i], true_label[i] plt.grid(False) plt.xticks([]) plt.yticks([]) thisplot = plt.bar(range(10), predictions_array, color="#777777") plt.ylim([0, 1]) predicted_label = np.argmax(predictions_array) thisplot[predicted_label].set_color('red') thisplot[true_label].set_color('blue') 让我们看看第0个图像,预测和预测数组。i = 0 plt.figure(figsize=(6,3)) plt.subplot(1,2,1) plot_image(i, predictions, test_labels, test_images) plt.subplot(1,2,2) plot_value_array(i, predictions, test_labels) plt.show()i = 12 plt.figure(figsize=(6,3)) plt.subplot(1,2,1) plot_image(i, predictions, test_labels, test_images) plt.subplot(1,2,2) plot_value_array(i, predictions, test_labels) plt.show()我们用它们的预测绘制几张图像。正确的预测标签为蓝色,错误的预测标签为红色。数字表示预测标签的百分比(总计为 100)。请注意,即使置信度非常高,也有可能预测错误。# 绘制前X个测试图像,预测标签和真实标签。# 用蓝色标记正确的预测,用红色标记错误的预测。num_rows = 5 num_cols = 3 num_images = num_rows*num_cols plt.figure(figsize=(2*2*num_cols, 2*num_rows)) for i in range(num_images): plt.subplot(num_rows, 2*num_cols, 2*i+1) plot_image(i, predictions, test_labels, test_images) plt.subplot(num_rows, 2*num_cols, 2*i+2) plot_value_array(i, predictions, test_labels) plt.show()最后,使用训练的模型对单个图像进行预测。# 从测试数据集中获取图像img = test_images[0] print(img.shape)tf.keras模型已经过优化,可以一次性对样本批次或样本集进行预测。因此,即使我们使用单个图像,仍需要将其添加到列表中:# 将图像添加到批次中,它是唯一的成员。img = (np.expand_dims(img,0)) print(img.shape) (1, 28, 28)现在预测此图像的正确标签:predictions_single = model.predict(img)print(predictions_single)plot_value_array(0, predictions_single, test_labels)_ = plt.xticks(range(10), class_names, rotation=45)model.predict返回一组列表,每个列表对应批次数据中的每张图像。(仅)获取批次数据中相应图像的预测结果:np.argmax(predictions_single[0]) 本实验利用网上已有的北京房价数据集预测了北京的房价,实现了TensorFlow的线性回归应用。更多的技术内容,请访问腾科公司网站 www.togogo.net
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第三期2026/08/21 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;念擎-华为云AI开发者运营案例开发专家
本期直播内容:AI六层能力首次详细解读 + 新一代华为云开发者空间亮相 + 校园案例直播带练
回顾中 -
华为云监控CES新特性解读2026/08/26 周三 19:00-20:30
刘英杰-华为云监控产品专家
华为云监控 CES H1 版本重磅全新升级!本次直播特邀华为云监控产品专家,围绕特性深度解读 + 现场实操演示 + 实时线上答疑三大模块,全方位拆解版本核心亮点,直击运维各类痛点难题。助力实现告警高效配置、指标快速检索、插件便捷部署,切实降低运维工作负担,提升监控运维工作效率。欢迎预约观看,互动提问交流!
回顾中
热门标签