-
微话题 “如何利用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
-
Tensorflow 2.0实现手写数字实验1. 实验介绍1.1. 关于本实验本实验主要内容是进行手写字体图像的识别,用到的框架主要包括:TensorFlow2.0,主要用于深度学习算法的构建,本实验以开源的手写字体数据集为基础,基于Keras深度学习库对手写字体进行识别。1.2. 实验目的l 理解图像识别的原理。l 掌握利用TensorFlow2.0构建图像识别模型。2. 实验步骤2.1. 导入实验环境 步骤 1 导入相应的模块Keras是一个高层神经网络API,Keras由纯Python编写而成并基于Tensorflow、Theano以及CNTK后端。Keras 支持快速实验。#导入相关依赖包import osimport tensorflow as tffrom tensorflow import kerasfrom tensorflow.keras import layers, optimizers, datasetsfrom matplotlib import pyplot as pltimport numpy as npos.environ['TF_CPP_MIN_LOG_LEVEL']='2'2.2. 导入实验数据集步骤 2 下载数据集TensorFlow2.0 的datasets中为我们提供了很多开源的数据集,可以直接执行命令下载。#下载后,我们会得到含有60k的训练集xs,和10k的测试集ys, (x, y), (x_val, y_val) = datasets.mnist.load_data()步骤 3 数据集格式转换我们下载得到的数据集是numpy的格式,需要转换成tensor。#将图像转化为tensorx = tf.convert_to_tensor(x, dtype=tf.float32) / 255.y = tf.convert_to_tensor(y, dtype=tf.int32)print(x.shape, y.shape)输出结果:(60000, 28, 28) (60000,)步骤 4 切分训练集与测试集train_dataset = tf.data.Dataset.from_tensor_slices((x, y))train_dataset = train_dataset.batch(200)步骤 5 查看数据集信息本实验是文字识别,我们可以先打印查看前9张图片,检查图片是否是正确的数据集。plt.figure()for i in range(9): plt.subplot(3,3,i+1) plt.imshow(x[i]) plt.ylabel(y[i].numpy())plt.show()输出结果:2.3. 手写字体图像识别建模 步骤 6 初始化神经网络数据集准备完成,接下来我们就需要构建训练模型,我们首先需要建立初始化的神经网络。#调用全连接784->512->256->10, 激活函数选择Relu进行映射model=keras.Sequential([ layers.Dense(512, activation='relu'), layers.Dense(256, activation='relu'), layers.Dense(10)])步骤 7 定义学习率更新规则设置模型的学习率参数。#给出学习率(步长)进行更新optimizer=optimizers.SGD(learning_rate=0.001)步骤 8 构建模型训练函数神经网络的模型参数更新是一个迭代的过程,所以我们可以将模型训练的过程定义成一个函数,从而进行模型的训练。def train_epoch(epoch): # Step4.loop for step, (x, y) in enumerate(train_dataset): with tf.GradientTape() as tape: # 将图像由二维矩阵转化为向量;[b, 28, 28] => [b, 784] x = tf.reshape(x, (-1, 28*28)) #将label用独热码表示,例5:[0,0,0,0,0,1,0,0,0,0] y = tf.one_hot(y, depth=10) # 将图像导入模型开始预测 # [b, 784] => [b, 10] out = model(x) # 计算 loss print(np.size(x)) loss = tf.reduce_sum(tf.square(out - y)) / x.shape[0] # 更新。optimize and update w1, w2, w3, b1, b2, b3 grads = tape.gradient(loss, model.trainable_variables) # w' = w - lr * grad optimizer.apply_gradients(zip(grads, model.trainable_variables)) if step % 100 == 0: print(epoch, step, 'loss:', loss.numpy()) return loss步骤 9 构建绘图函数绘制train loss与epoch的关系图,这样我们就可以查看模型训练的每一步损失值。def plot_figure(y): #作出train loss与epoch的关系图 x = range(0, np.size(y)) plt.figure(1) plt.plot(x, y, 'o-') plt.title('epoches') plt.ylabel('Train loss') plt.show() 步骤 10 构建模型训练函数定义模型训练函数用于进行模型训练:def train(): #创建list用于保存loss值 loss_list = [] for epoch in range(30): loss= train_epoch(epoch) loss_list.append(loss) plot_figure(loss_list) 步骤 11 执行模型训练执行定义好的模型训练函数进行模型训练:if __name__ == '__main__': train()输出结果:展示最后10次的模型训练损失值:20 0 loss: 1.127936415680021 0 loss: 1.114137315680022 0 loss: 1.101546915680023 0 loss: 1.089968715680024 0 loss: 1.079238415680025 0 loss: 1.069260615680026 0 loss: 1.059951515680027 0 loss: 1.051261215680028 0 loss: 1.043116315680029 0 loss: 1.0354265train loss与epoch的关系图: 更多的技术内容,请访问腾科公司网站 www.togogo.net
-
Tensorflow 2.0保存和加载模型模型进度可以在训练期间和训练后保存。这意味着模型可以在它停止的地方继续,并避免长时间的训练。保存还意味着您可以共享您的模型,其他人可以重新创建您的工作。当发布研究模型和技术时,大多数机器学习实践者共享:l 用于创建模型的代码l 以及模型的训练权重或参数共享此数据有助于其他人了解模型的工作原理,并使用新数据自行尝试。注意:小心不受信任的代码(TensorFlow模型是代码)。有关详细信息,请参阅安全使用TensorFlow 。选项:保存TensorFlow模型有多种方法,具体取决于你使用的API。本章节使用tf.keras(一个高级API,用于TensorFlow中构建和训练模型),有关其他方法,请参阅TensorFlow保存和还原指南或保存在eager中。1. 设置1.1. 安装和导入需要安装和导入TensorFlow和依赖项pip install h5py pyyaml1.2. 获取样本数据集我们将使用MNIST数据集来训练我们的模型以演示保存权重,要加速这些演示运行,请只使用前1000个样本数据:from __future__ import absolute_import, division, print_function, unicode_literals import os import tensorflow as tf try: import tensorflow.keras as keras except: import tensorflow.python.keras as keras #获取样本数据集 (train_images, train_labels), (test_images, test_labels) = keras.datasets.mnist.load_data() train_labels = train_labels[:1000] test_labels = test_labels[:1000] train_images = train_images[:1000].reshape(-1, 28 * 28) / 255.0 test_images = test_images[:1000].reshape(-1, 28 * 28) / 255.01.3. 定义模型让我们构建一个简单的模型,我们将用它来演示保存和加载权重。#定义模型 # 返回一个简短的序列模型 def create_model(): model = tf.keras.models.Sequential([ keras.layers.Dense(512, activation='relu', input_shape=(784,)), keras.layers.Dropout(0.2), keras.layers.Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) return model # 创建基本模型实例 model = create_model() print(model.summary()) Model: "sequential"_________________________________________________________________Layer (type) Output Shape Param #=================================================================dense (Dense) (None, 512) 401920_________________________________________________________________dropout (Dropout) (None, 512) 0_________________________________________________________________dense_1 (Dense) (None, 10) 5130=================================================================Total params: 407,050Trainable params: 407,050Non-trainable params: 0_________________________________________________________________2. 在训练期间保存检查点主要用例是在训练期间和训练结束时自动保存检查点,通过这种方式,您可以使用训练有素的模型,而无需重新训练,或者在您离开的地方继续训练,以防止训练过程中断。tf.keras.callbacks.ModelCheckpoint是执行此任务的回调,回调需要几个参数来配置检查点。2.1. 检查点回调使用情况训练模型并将其传递给 ModelCheckpoint回调#在训练期间保存检查点 checkpoint_path = "training_1/cp.ckpt" checkpoint_dir = os.path.dirname(checkpoint_path) # 创建一个检查点回调 cp_callback = tf.keras.callbacks.ModelCheckpoint(checkpoint_path, save_weights_only=True, verbose=1) model = create_model() model.fit(train_images, train_labels, epochs = 10, validation_data = (test_images,test_labels), callbacks = [cp_callback]) # pass callback to training Train on 1000 samples, validate on 1000 samples ...... Epoch 10/10 960/1000 [===========================>..] - ETA: 0s - loss: 0.0392 - accuracy: 1.0000 Epoch 00010: saving model to training_1/cp.ckpt 1000/1000 [==============================] - 0s 207us/sample - loss: 0.0393 - accuracy: 1.0000 - val_loss: 0.3976 - val_accuracy: 0.8750 <tensorflow.python.keras.callbacks.History at 0x7efc3eba7358>这将创建一个TensorFlow检查点文件集合,这些文件在每个周期结束时更新。文件夹checkpoint_dir下的内容如下:(Linux系统使用 ls命令查看)checkpoint cp.ckpt.data-00000-of-00001 cp.ckpt.index创建一个新的未经训练的模型,仅从权重恢复模型时,必须具有与原始模型具有相同体系结构的模型,由于它是相同的模型架构,我们可以共享权重,尽管它是模型的不同示例。现在重建一个新的,未经训练的模型,并在测试集中评估它。未经训练的模型将在随机水平(约10%的准确率):model = create_model() loss, acc = model.evaluate(test_images, test_labels) print("Untrained model, accuracy: {:5.2f}%".format(100*acc)) 1000/1000 [==============================] - 0s 107us/sample - loss: 2.3224 - accuracy: 0.1230Untrained model, accuracy: 12.30%然后从检查点加载权重,并重新评估:model.load_weights(checkpoint_path) loss,acc = model.evaluate(test_images, test_labels) print("Restored model, accuracy: {:5.2f}%".format(100*acc))1000/1000 [==============================] - 0s 48us/sample - loss: 0.3976 - accuracy: 0.8750Restored model, accuracy: 87.50%2.2. 检查点选项回调提供了几个选项,可以为生成的检查点提供唯一的名称,并调整检查点频率。训练一个新模型,每5个周期保存一次唯一命名的检查点:# 在文件名中包含周期数. (使用 `str.format`) checkpoint_path = "training_2/cp-{epoch:04d}.ckpt" checkpoint_dir = os.path.dirname(checkpoint_path) cp_callback = tf.keras.callbacks.ModelCheckpoint( checkpoint_path, verbose=1, save_weights_only=True, # 每5个周期保存一次权重 period=5) model = create_model() model.save_weights(checkpoint_path.format(epoch=0)) model.fit(train_images, train_labels, epochs = 50, callbacks = [cp_callback], validation_data = (test_images,test_labels), verbose=0) Epoch 00005: saving model to training_2/cp-0005.ckpt......Epoch 00050: saving model to training_2/cp-0050.ckpt<tensorflow.python.keras.callbacks.History at 0x7efc7c3bbd30>现在,查看生成的检查点并选择最新的检查点:#现在,查看生成的检查点并选择最新的检查点: latest = tf.train.latest_checkpoint(checkpoint_dir) print(latest) 'training_2/cp-0050.ckpt'注意:默认的tensorflow格式仅保存最近的5个检查点。要测试,请重置模型并加载最新的检查点:model = create_model() model.load_weights(latest) loss, acc = model.evaluate(test_images, test_labels) print("Restored model, accuracy: {:5.2f}%".format(100*acc)) 1000/1000 [==============================] - 0s 84us/sample - loss: 0.4695 - accuracy: 0.8810 Restored model, accuracy: 88.10%3. 这些文件是什么?上述代码将权重存储到检查点)格式的文件集合中,这些文件仅包含二进制格式的训练权重.检查点包含:一个或多个包含模型权重的分片;索引文件,指示哪些权重存储在哪个分片。如果您只在一台机器上训练模型,那么您将有一个带有后缀的分片:.data-00000-of-000014. 手动保存权重上面你看到了如何将权重加载到模型中。手动保存权重同样简单,使用Model.save_weights方法。# 保存权重 model.save_weights('./checkpoints/my_checkpoint') # 加载权重 model = create_model() model.load_weights('./checkpoints/my_checkpoint') loss,acc = model.evaluate(test_images, test_labels) print("Restored model, accuracy: {:5.2f}%".format(100*acc))5. 保存整个模型模型和优化器可以保存到包含其状态(权重和变量)和模型配置的文件中,这允许您导出模型,以便可以在不访问原始python代码的情况下使用它。由于恢复了优化器状态,您甚至可以从中断的位置恢复训练。保存完整的模型非常有用,您可以在TensorFlow.js(HDF5, Saved Model) 中加载它们,然后在Web浏览器中训练和运行它们,或者使用TensorFlow Lite(HDF5, Saved Model)将它们转换为在移动设备上运行。5.1. 作为HDF5文件Keras使用HDF5标准提供基本保存格式,出于我们的目的,可以将保存的模型视为单个二进制blob。#保存整个模型 #Keras使用HDF5标准提供基本保存格式,出于我们的目的,可以将保存的模型视为单个二进制blob。 model = create_model() model.fit(train_images, train_labels, epochs=5) # 保存整个模型到HDF5文件 model.save('my_model.h5')现在从该文件重新创建模型:# 重新创建完全相同的模型,包括权重和优化器 new_model = keras.models.load_model('my_model.h5') print(new_model.summary()) Model: "sequential_6"_________________________________________________________________Layer (type) Output Shape Param #=================================================================dense_12 (Dense) (None, 512) 401920_________________________________________________________________dropout_6 (Dropout) (None, 512) 0_________________________________________________________________dense_13 (Dense) (None, 10) 5130=================================================================Total params: 407,050Trainable params: 407,050Non-trainable params: 0_________________________________________________________________检查模型的准确率:#检查模型的准确率: loss, acc = new_model.evaluate(test_images, test_labels) print("Restored model, accuracy: {:5.2f}%".format(100*acc))1000/1000 [==============================] - 0s 94us/sample - loss: 0.4137 - accuracy: 0.8540Restored model, accuracy: 85.40%此方法可保存模型的所有东西:权重值模型的配置(架构)优化器配置Keras通过检查架构来保存模型,目前它无法保存TensorFlow优化器(来自tf.train)。使用这些时,您需要在加载后重新编译模型,否则您将失去优化程序的状态。5.2. 作为 saved_model注意:这种保存tf.keras模型的方法是实验性的,在将来的版本中可能会有所改变。创建一个新的模型:model = create_model() model.fit(train_images, train_labels, epochs=5) 创建saved_model,并将其放在带时间戳的目录中:import time saved_model_path = "./saved_models/{}".format(int(time.time())) tf.keras.experimental.export_saved_model(model, saved_model_path) print(saved_model_path) './saved_models/1555630614'从保存的模型重新加载新的keras模型:new_model = tf.keras.experimental.load_from_saved_model(saved_model_path) print(new_model.summary()) Model: "sequential_7"_________________________________________________________________Layer (type) Output Shape Param #=================================================================dense_14 (Dense) (None, 512) 401920_________________________________________________________________dropout_7 (Dropout) (None, 512) 0_________________________________________________________________dense_15 (Dense) (None, 10) 5130=================================================================Total params: 407,050Trainable params: 407,050Non-trainable params: 0_________________________________________________________________运行加载的模型进行预测:model.predict(test_images).shape (1000, 10)new_model.compile(optimizer=model.optimizer, # keep the optimizer that was loaded loss='sparse_categorical_crossentropy', metrics=['accuracy']) # 评估加载后的模型 loss, acc = new_model.evaluate(test_images, test_labels) print("Restored model, accuracy: {:5.2f}%".format(100*acc)) 1000/1000 [==============================] - 0s 102us/sample - loss: 0.4367 - accuracy: 0.8570 Restored model, accuracy: 85.70% 本实验利用网上已有的北京房价数据集预测了北京的房价,实现了TensorFlow的线性回归应用。更多的技术内容,请访问腾科公司网站 www.togogo.net
-
TensorFlow 2.0 简介1. TensorFlow简介TensorFlow是目前最为流行的深度学习框架,是人工智能领域第一主要工具,迭代版本共有0.1,1.0,和2.0三个版本,本章主要针对最新的2.0版本进行讲解和学习。它是一个用于机器学习和深度学习的端到端开源平台。15年9月发布0.1版本;17年2月发布1.0版本;19年3月发布2.0版本。15年同类型框架:l Ski-learn: Machine Learning, 不支持GPU; l Caffe: 第一个面向深度学习的框架,但不支持自动求导; l Keras: 只提供API接口; l Torch: Lua语言; l Teano: 开发调试难。当下同类型框架:l Caffe: Facebookl Caffe2: PyTorch(最新版本的Caffe2 作为PyTorch的C++后端已经并入到PyTorch里去)。l Torch--PyTorch。PyTorch当下非常流行的框架,集合了Torch和Caffe2,Facebook主推。 l Teano: Google推出 Tensorflow1.0 ----Tensorflow2.0。2. V1.0与PyTorch1.0对比l 与Tensorflow1.0版本同一时期PyTorch1.0版本发布。l Tensorflow1.0与PyTorch1.0版本的对比:3. V1.0的弊端l TensorFlow1.0里在创建了Tensor之后,不能直接返回结果。 而是需要创建session会话机制,包含graph的概念在里面,而且需要session.run 才能运行。 这种风格更像是一种硬件编程语言VHDL。l 与PyTorch等一些简单的框架相比,TensorFlow1.0 徒增了以上概念,用户使用起来非常的困扰。l TensorFlow1.0调试困难,API混乱,入门困难。入了门使用起来依旧困难,导致很多研究人员转向了PyTorch。4. V2.0 comingl TF+Keras:最大的特性(Easy to use): 去掉了graph 和session机制。变的像Python,PyTorch一样所见即所得。l 主要改进点:p Session.run:图和会话机制;p Tf.control_dependencies:实时控制的概念;p Tf.global_variables_initializer;p Tf.cond:分支控制的概念原本可以通过python中if,else等语句来完成;p Tf.while_loop 。对比发现跟PyTorch的风格很相似:import TensorFlow as tfa=tf.constant(1.)b=tf.constant(3.)c=tf.add(a,b)print(float(c))l TensorFlow1.0会将大量的时间花费在这些冗余的概念编写上,而忽略对深度学习算法的研究。诸如以下所列出的抽象的概念将一去不复返。p 计算图Graphp 会话Sessionp 变量管理Variable Scope与共享reusep Define-and-runl 本课程假设你对TensorFlow一无所知,即使知道一些TensorFlow1.0中的概念,但是在2.0中基本上用不到。因此今后不需要我们对TensorFlow1.0再进行学习和了解。5. TensorFlow2.0简介l TensorFlow2.0包括了TensorFlow核心库,JavaScript, Lite, Extended。构成了TensorFlow的一个完整的生态系统。l TensorFlow核心库:p 使初学者和专家可以轻松的创建机器学习模型。p TensorFlow的高级API基于Keras API标准,用于定义和训练神经网络。p Keras通过用户友好的API实现快速原型设计,最先进的研究和生产。5.1. JavaScriptl TensorFlow.js:是一个用于在JavaScript中开发和训练ML模型,并在浏览器或Node.js上部署的库。p 运行现有模型:使用官方TensorFlow.js模型或者转换Python模型。p 重新训练现有模型:使用Transfer Learning自定义模型。p 使用JavaScript开发ML:使用灵活直观的API直接在JavaScript中构建和训练模型,TensorFlow.js。5.2. TensorFlow Litel TensorFlow Lite:是一个用于设备推理的开源深度学习框架。它可以满足在移动和物联网设备上部署机器学习模型。p 选择一个模型:选择新模型或者重新训练现有模型p 兑换:使用TensorFlow Lite转换器将TensorFlow模型转换为压缩的平缓冲区p 部署:获取压缩的.tflite文件并将其加载到移动或嵌入式设备中。p 优化:通过将32位浮点数转换为更高效的8位整数或在GPU上运行来进行量化。5.3. TensorFlow Extendedl TensorFlow Extended (TFX):是用于部署生产ML管道的端到端平台,当训练好的模型准备从研究转移到生产时,使用TFX创建和管理生产管道。p TensorFlow数据验证:TFDV可帮助开发人员大规模了解,验证和监控其ML数据。p TensorFlow变换:将数据预处理成合适的格式。p TensorFlow模型分析:TFMA使开发人员能够计算和可视化模型的评估指标。p TensorFlow服务:轻松部署新算法和实验,同时保持相同的服务器架构和API。6. 为什么使用TensorFlowl TensorFlow最为当下最流行的框架主要因为一下几个优势:p 支持GPU加速p 支持自动求导p 深度学习API7. 使用TensorFlow7.1. GPU加速l 支持GPU加速:对矩阵的加减乘除有一个并行的运算加速。7.2. 自动求导l TensorFlow框架的另一个优势就是自动求导:7.3. 深度学习APIl TensorFlow框架提供大量深度学习API: Ø tf.matmul Ø tf.nn.conv2dØ tf.nn.reluØ tf.nn.maxpool2dØ tf.nn.sigmoidØ tf.nn.softmaxØ layers.DenseØ layers.Conv2DØ layers.LSTMØ layers.ReLUØ layers.MaxPool2D 下一节会给大家介绍tensorflow2.0基础操作,更多的技术内容,请访问腾科公司网站 www.togogo.net
-
TensorFlow 变量1. 变量概念变量维护图执行过程中的状态信息。如在神经网络中,用于标识w、b等系数。变量其实是Python中的Variable对象。TensorFlow中变量的初始值可以设置成随机数、常数或者是通过其他变量的初始值计算得到。在TensorFlow中,变量(Variable)是特殊的张量(Tensor),它的值可以是一个任何类型和形状的张量。与其他张量不同,变量存在于单个 session.run 调用的上下文之外,也就是说,变量存储的是持久张量,当训练模型时,用变量来存储和更新参数。变量包含张量 (Tensor)存放于内存的缓存区。建模时它们需要被明确地初始化,模型训练后它们必须被存储到磁盘。这些变量的值可在之后模型训练和分析是被加载。除此之外,在调用op之前,所有变量都应被显式地初始化过。2. 创建变量当创建一个变量时,你将一个张量作为初始值传入构造函数Variable()。TensorFlow提供了一系列操作符来初始化张量,初始值是常量或是随机值。注意,所有这些操作符都需要你指定张量的shape。那个形状自动成为变量的shape。变量的shape通常是固定的,但TensorFlow提供了高级的机制来重新调整其行列数。# 创建两个变量.weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),name="weights")biases = tf.Variable(tf.zeros([200]), name="biases")调用tf.Variable()添加一些操作(Op, operation)到graph:l 一个Variable操作存放变量的值。l 一个初始化op将变量设置为初始值。这事实上是一个tf.assign操作.l 初始值的操作,例如示例中对biases变量的zeros操作也被加入了graph。tf.Variable的返回值是Python的tf.Variable类的一个实例。3. 变量初始化创建好变量之后,变量必须初始化。变量的初始化必须在模型的其它操作运行之前先明确地完成。最简单的方法就是添加一个给所有变量初始化的操作,并在使用模型之前首先运行那个操作。你或者可以从检查点文件中重新获取变量值,详见下文。使用tf.initialize_all_variables()添加一个操作对变量做初始化。记得在完全构建好模型并加载之后再运行那个操作。# 创建两个变量.weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),name="weights")biases = tf.Variable(tf.zeros([200]), name="biases")...# 初始化变量init_op = tf.initialize_all_variables() # Later, when launching the modelwith tf.Session() as sess: #运行初始化操作. sess.run(init_op) ... # Use the model ...4. 保存和加载最简单的保存和恢复模型的方法是使用tf.train.Saver对象。构造器给graph的所有变量,或是定义在列表里的变量,添加save和restoreops。saver对象提供了方法来运行这些ops,定义检查点文件的读写路径。5. 检查点文件变量存储在二进制文件里,主要包含从变量名到tensor值的映射关系。当你创建一个Saver对象时,你可以选择性地为检查点文件中的变量挑选变量名。默认情况下,将每个变量Variable.name属性的值。6. 保存变量用tf.train.Saver()创建一个Saver来管理模型中的所有变量。# Create some variables.v1 = tf.Variable(..., name="v1")v2 = tf.Variable(..., name="v2")...# Add an op to initialize the variables.init_op = tf.initialize_all_variables() # Add ops to save and restore all the variables.saver = tf.train.Saver() # Later, launch the model, initialize the variables, do some work, save the# variables to disk.with tf.Session() as sess: sess.run(init_op) # Do some work with the model. .. # Save the variables to disk. save_path = saver.save(sess, "/tmp/model.ckpt") print "Model saved in file: ", save_path7. 恢复变量用同一个Saver对象来恢复变量。注意,当你从文件中恢复变量时,不需要事先对它们做初始化。# Create some variables.v1 = tf.Variable(..., name="v1")v2 = tf.Variable(..., name="v2")...# Add ops to save and restore all the variables.saver = tf.train.Saver() # Later, launch the model, use the saver to restore variables from disk, and# do some work with the model.with tf.Session() as sess: # Restore variables from disk. saver.restore(sess, "/tmp/model.ckpt") print "Model restored." # Do some work with the model ...8. 选择存储和恢复哪些变量如果你不给tf.train.Saver()传入任何参数,那么saver将处理graph中的所有变量。其中每一个变量都以变量创建时传入的名称被保存。有时候在检查点文件中明确定义变量的名称很有用。举个例子,你也许已经训练得到了一个模型,其中有个变量命名为"weights",你想把它的值恢复到一个新的变量"params"中。有时候仅保存和恢复模型的一部分变量很有用。再举个例子,你也许训练得到了一个5层神经网络,现在想训练一个6层的新模型,可以将之前5层模型的参数导入到新模型的前5层中。你可以通过给tf.train.Saver()构造函数传入Python字典,很容易地定义需要保持的变量及对应名称:键对应使用的名称,值对应被管理的变量。注意:如果需要保存和恢复模型变量的不同子集,可以创建任意多个saver对象。同一个变量可被列入多个saver对象中,只有当saver的restore()函数被运行时,它的值才会发生改变。如果你仅在session开始时恢复模型变量的一个子集,你需要对剩下的变量执行初始化op。详情请见tf.initialize_variables()。# Create some variables.v1 = tf.Variable(..., name="v1")v2 = tf.Variable(..., name="v2")...# Add ops to save and restore only 'v2' using the name "my_v2"saver = tf.train.Saver({"my_v2": v2})# Use the saver object normally after that.... 更多的技术内容,请访问腾科it教育集团网站 www.togogo.net
-
今天的技术常新日新月异,数字化转型给全球各行业都带来了去打的变革和机遇,今天任何一家公司都必须成为软件公司,通过科技的提升才能赢得未来。面对市场和技术的快速发展,实现快速迭代,敏捷开发和DevOps研发运维一体化,已经成为软件工程领域的主流趋势。在实际推动DevOps实践的过程中,无论是快速成长的新创企业,或是拥有大规模IT团队的大型企业,我们都常听到这种问题:为什么要DevOps?DevOps能解决哪些问题?导入DevOps有哪些挑战,方法和步骤?如何让DevOps实践为企业创造价值?面对这些问题,我们的答案是“华为云DevCloud”。华为云DevCloud是一站式、全流程、安全可信的DevOps云平台,集华为30年研发实践、前沿研发理念、先进研发工具为一体,面向开发者提供研发工具服务,让软件开发简单高效。华为云DevCloud为企业研发团队提供了端到端的研发管理,配置管理,持续集成,持续部署,持续监控和持续改进能力。华为云DevCloud支持所有主流编程语言和平台。在华为发展历程中,一直致力于打造提质增效的研发能力。华为云DevCloud将30年积累的研发经验以云服务的方式面向全社会开放,打造了软件开发云平台, 为广大中小软件企业、双创企业、互联网企业、高校和软件开发者提供一站式智能研发工具平台,开发团队借助华为的经验和流程,提高研发效率以及代码质量,并大幅降低开发成本。本课程为期两天,以华为DevCloud HE2E DevOps实施框架和凤凰商城实例项目为基础,为管理者和开发者提供理论+实践的华为云DevCloud全面功能讲解,配合丰富细致的教材和游戏,引导学员一步步完成使用华为软开云构建自己的DevOps工具链的过程。课程大纲
-
电力杆塔鸟窝监测一、项目背景 输配电系统的稳定运行对于整个电力行业来说是至关重要的,电力杆塔更是遍布各地。但是鸟类等动物经常会在杆塔上筑巢,导致电力线缆之间的绝缘变差,容易引起线路短路、跳闸、火灾等事故,对生产生活造成巨大的经济损失,因此电网运行人员时常会对电力杆塔上的鸟窝进行清除,消除隐患。 二、作品功能 实时监测杆塔上是否存在有鸟巢等障碍物,及时告警;通知运维人员采取清除措施; 对可能有鸟类正在筑巢的情况,设备发出声光等进行驱逐。 三、系统实现1、网络架构 感知层设备通过NB-IoT网络将数据发送至IoT平台,应用界面采用IoT Booster开发。2、硬件设计 采用红外传感器或者超声波的方式检测杆塔间隙是否有障碍物存在。3、设备模型定义(profile) 上报信息包括:电量、经纬度、报警值;下发命令:控制声音和光电驱逐功能4、应用系统(IoT Booster)
-
总的来看其实就是用postman做三步就可以解决的了;第一步:Ps:https://49.4.92.x:8743/iocm/app/sec/v1.1.0/login ip地址从下面拿然后就可以保存其中的信息: { "accessToken": "2db2ac3137c4208479a7a25b41925c1", "tokenType": "bearer", "refreshToken": "77d6dcd5798ca73248ee38e994a65565", "expiresIn": 3600, "scope": "default"} 第二步:https://49.4.92.191:8743/iocm/app/reg/v1.1.0/deviceCredentials要用到的代码:{ "verifyCode": "33343R232111", "nodeId": "33343R232111", "deviceInfo": { "manufacturerName":"SZMC", "manufacturerId":"c24eaf1eb93b466faf5cbfcd9d3ab569", "deviceType":"Bulb", "model":"Bulb01", "protocolType":"LWM2M" }, "timeout": 0}保存要用到的信息:{ "deviceId": "00aee60d-6805-477d-9d16-35a9554224c7", "verifyCode": "1bcfef6e-4df7-4492-8017-0a31fc6d11ad", "timeout": 0, "psk": "d6979b50ebf2fbd37316729ef832e4fc"} 最后一步:核心的部分在于要把虚拟设备激活起来(https://ilearningx.huawei.com/courses/course-v1:HuaweiX+EBGTC00000285+2019.4/courseware/5558aecf537f459a825e8fe5669a3305/43ff829db0c44801a2c9bf17b345b1b3/),用起来,然后把虚拟设备的ID写上去:总操作参见视频:https://ilearningx.huawei.com/courses/course-v1:HuaweiX+EBGTC00000285+2019.4/courseware/d4fc74323bce40e3a34bf67e76f56f2d/9402024ae61c496ea6f20e4abc15cd71/详细可以看-https://bbs.huaweicloud.com/blogs/2b2e14045a6c11e9bd5a7ca23e93a891
-
场景1:智慧路灯,就是光强大于100白天时候关灯,小于100就开灯,从而可以为路灯节省能源;场景2:回家前开门前可以看一下家里灯的情况,可以提前开灯,还有睡觉了,躺床上,用小程序关灯睡觉就好,上班离开家了,中途发现灯还没有关闭,但是我们可以远程关灯又不用回家关灯;场景3:视频监控的周围光强不大的情况下(晚上或者地铁隧道 地下室等环境),智慧路灯可以根据光强情况自动开灯,从而为视频监控提供优良的视频监控拍摄环境;场景4:智能路灯是否可以根据人或者车等目标移动的距离从而开灯甚至适当调整到最省电和最佳光强等综合因素结合,从而提供到最适应人眼睛的光强的情况下又可以省电,用在刀刃上;加一个红外传感器就可以了。场景5:手机或者显示器的光的强度可以根据人的眼睛距离屏幕的不同情况从而调整到最适宜人眼睛的光强,从而保护眼睛;
-
结合华为OceanConnect平台和小熊派的训练营作品分享注:虽然这是一个学习作品展示,我们也当一个真正的项目来介绍一、项目背景 家校信息互通,关注学生安全。 父母的眼睛一看不见孩子,就时刻担心,即使是爷爷奶奶送上学,做妈妈的也不很放心; 作为学校更是担心在校门口孩子被拐走。 那么学生的行动在家校间接驳时间点上的信息互通,就是本案要做的事。 二、业务流程概述 1)学生进入学校/离开学校进行打卡,卡号信息通过南向终端设备采集后上传到华为OceanConnect平台,通过订阅接口发送给北向应用,应用服务得到信息后,到数据库中检索卡号对应的学生信息,然后取得学生家长手机号,并发送一条学生已经到校的短信。给家长一个安心消息。 2)学校门口总是乱糟糟,为防止学生过早的出来等家长,那么家长在到达门口时,通过微信公众号已经定制好的菜单,发送通知命令,微信命令发送给北向应用,应用服务从数据库检索订阅微信号对应得学生信息,然后拿到学生对应的终端设备,向华为OceanConnect平台发送呼叫命令,最终命令发送给南向终端设备,设备端代码根据接收消息类型和内容选择显示和亮灯提醒.三、项目内容1、硬件方案开发板:小熊派 STM32L4xx通信方式:WIFI/GPRS/NB-IoT可选平台:OceanConnect 2、软件方案1)依托OceanConnect平台,在平台上创建项目和产品,并根据项目的服务能力信息,编写Profile以及编解码插件2)北向微服务应用依赖OceanConnect平台的Api注册设备信息,查询以及接收回调信息login/subscriptions/deviceCommands主动调用的接口deviceDataChanged/commandChanged提供给回调的服务 详细接口说明和使用见 Asp.net core实现北向应用服务对接OceanConnect3)北向业务系统,维护设备和学校信息 “智慧校园”是一个SaaS应用,一个设备和一个学校对应,学校可以注册多个学生,家长微信端绑定学生信息; 也就是一个一个学校(设备)为中心,连带着学生和家长作为一个SaaS的租户。4、产品全貌四、作品演示 见 智慧校园演示视频五、源码下载为了完成任务,也下载了不少别人的代码,最后攒了一个自己的。这是完整的LiteOS工程。CSDN无法自己设置下载积分,如果下载不了的,可以在这里留言。https://download.csdn.net/download/shenlongju/11211226
-
参赛作品:消防安全监测感知平台作品介绍: 随着近几年,火灾事件频频发生,国家对消防安全越来越重视,城市的消防建设需要借助物联网相关设备,加强对消防隐患的跟踪与排除,从而建设一个智能的消防联动系统。应用场景: 目前一些老小区,房子老旧,电线繁杂,老人居多,容易引发一些火灾,为加强安全防范,小区物业可将每家每户安装烟雾探测报警器,一但发生火灾,物业会马上收到相关提醒,火警也能及时赶到现场进行灭火救援。作品架构:作品演示:通过华为云OceanConnect平台开发产品通过华为云Iot Booster开发Web管理应用
-
TensorFlow 开发基础1. TensorFlow是什么TensorFlow是谷歌开源的第二代用于数字计算的软件库,它可以很好的支持深度学习的各种算法,但它的应用不局限于深度学习,可以支持多种计算平台,系统稳定性较高。为了更好理解它,从以下几个方面介绍:1)TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。2)从命名来理解:Tensor(张量)意味着N维数组,Flow(流)意味 着基于数据流图的计算。Tensorflow运行过程就是张量从图的一端流动到另一端的计算过程。3)TensorFlow的开发过程中,重点在于构建执行流图。也就是:“Data Flow Graphs”,表示TensorFlow是一种基于图的计算框架,其中节点(Nodes)在图中表示数学操作,线(Edges)则表 示在节点间相互联系的多维数据数组,即张量(Tensor),这种基于流的架构让 TensorFlow具有非常高的灵活性。2. TensorFlow的特点1)真正的可移植性引入各种计算设备的支持包括CPU/GPU/TPU,以及能够很好地运行在移动端,如安卓、ios、等等2)多语言支持Tensorflow 有一个合理的c++使用界面,也有一个易用的python使用界面来构建和执行你的graphs,你可以直接写python/c++程序。3)高度的灵活性与效率TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库能够灵活进行组装图,执行图。随着开发的进展,Tensorflow的效率不算在提高4)支持TensorFlow 由谷歌提供支持,谷歌投入了大量精力开发 TensorFlow,它希望 TensorFlow 成为机器学习研究人员和开发人员的通用语言3. TensorFlow可以做什么• 自动驾驶小车• 生成音乐• 图像识别• 语音识别• 语言模型• **行为识别• 定理证明• 拿来玩马里奥赛车… 4. TensorFlow计算过程 TensorFlow基于数据流图,用于大规模分布式数值计算的开源框架。节点表示某种抽象的计算,边表示节点之间相互联系的张量。 TensorFlow是一个通过计算图的形式来表述计算的编程系统,是以张量(tensor)在计算图(graph)上流动(flow)的方式实现和执行机器学习/深度学习算法的框架。5. TensorFlow架构下图是TF的系统架构,从底向上分为设备管理和通信层、数据操作层、图计算层、API接口层、应用层。其中设备管理和通信层、数据操作层、图计算层是TF的核心层。底层设备通信层负责网络通信和设备管理。设备管理可以实现TF设备异构的特性,支持CPU、GPU、Mobile等不同设备。网络通信依赖gRPC通信协议实现不同设备间的数据传输和更新。第二层是Tensor的OpKernels实现。这些OpKernels以Tensor为处理对象,依赖网络通信和设备内存分配,实现了各种Tensor操作或计算。Opkernels不仅包含MatMul等计算操作,还包含Queue等非计算操作。Kernel层可以跑在cpu上也可以跑在gpu上。第三层是图计算层(Graph),包含本地计算流图和分布式计算流图的实现。Graph模块包含Graph的创建、编译、优化和执行等部分,Graph中每个节点都是OpKernels类型表示。第四层是API接口层。Tensor C API是对TF功能模块的接口封装,便于其他语言平台调用。第四层以上是应用层。不同编程语言在应用层通过API接口层调用TF核心功能实现相关实验和应用。TensorFlow的内核引擎使用C++实现的,效率是很高的。TensorFlow的内核封装实现了NN、CNN等基本机器学习算法。前端应用层支持Python或C++,一般用Python(AI领域第一编程语言)。在应用层,如果使用了其他的Python耗时操作(如数据预处理等),可能效率会比较低,但这不是TensorFlow造成的。6. TensorFlow开发环境搭建推荐使用Anaconda3+Pycharm来开发,安装过程可参考以下博客文章https://blog.csdn.net/albert201605/article/details/79090620/7. TensorFlow简单示例''' 1.引入tensorflow 2.定义常量、变量 3.创建Session会话 4.调用Session中的run()方法来运行,得出结果 5.关闭seession ''' #引入tensorflow import tensorflow as tf #定义常量 hello = tf.constant("hello,tensorflow") a = tf.constant(10) b = tf.constant(20) with tf.Session() as sess: print(sess.run(hello)) print(sess.run(a + b)) 更多的技术内容,请访问腾科公司网站 www.togogo.net
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签