internetreadfile读取数据长度为0_【完结】TensorFlow2.0 快速上手手册

8f8016e979bb2317d2d94f280b2c7eb1.png

大家好,这是专栏《TensorFlow2.0》的第五篇文章,我们对专栏《TensorFlow2.0》进行一个总结。

我们知道全新的TensorFlow2.0 Alpha已经于2019年3月被发布,新版本对TensorFLow的使用方式进行了重大改进,为了满足各位AI人对TensorFlow2.0的需求,我们推出了专栏《TensorFlow2.0》,前四篇文章带大家领略了全新的TensorFlow2.0的变化及具体的使用方法。今天就带大家总结下TensorFlow2.0的一些变化。

作者 | 汤兴旺

编辑 | 言有三

1 默认动态图机制

在tensorflow2.0中,动态图是默认的不需要自己主动启用它。

import tensorflow as tf
a = tf.constant([1,2,3])
b = tf.constant([4,5,6])
print(a+b)

上面的结果是tf.Tensor([5 7 9], shape=(3,), dtype=int32)

可以说有了动态图,计算是非常方便的了,再也不需要理解复杂的graph和Session了。

另外我们在对比看下Pytorch中是如何计算上面的结果的。

import torch
a = torch.Tensor([1,2,3])
b = torch.Tensor([4,5,6])
print(a+b)

可以发现TensorFlow2.0和Pytorch一样简单了,而且代码基本一样。

2 弃用collections

我们知道在TensorFlow1.X中可以通过集合 (collection) 来管理不同类别的资源。例如使用tf.add_to_collection 函数可以将资源加入一个或多个集合。使用tf.get_collection获取一个集合里面的所有资源。这些资源可以是张量、变量或者运行 Tensorflow程序所需要的资源。我们在训练神经网络时会大量使用集合管理技术。如通过tf.add_n(tf.get_collection("losses")获得总损失。

由于collection控制变量很不友好,在TensorFlow2.0中,弃用了collections,这样代码会更加清晰。

我们知道TensorFlow2.0非常依赖Keras API,因此如果你使用tf.keras,每个层都会处理自己的变量,当你需要获取可训练变量的列表,可直接查询每个层。

from tensorflow import keras
from tensorflow.keras import Sequential
model = Sequential([keras.layers.Dense(100,activation="relu",input_shape=[2]),keras.layers.Dense(100,activation="relu"),keras.layers.Dense(1)
])

我们通过model.weights,就可以查询每一层的可训练的变量。结果如下面这种形式。

<tf.Variable'dense/kernel:0' shape=(2,100)             dtype=float32,   numpy=array([[...]]), dtype=float32)>,

另外在TensorFlow2.0中,也删除了Variable_scopes和tf.get_variable(),需要用面向对象的方式来处理变量共享。

3 删除杂乱的API,重用Keras

之前TensorFlow1.X中包含了很多重复的API或者不推荐使用的 API,杂乱无章,例如可以使用 tf.layers或tf.keras.layers创建图层,这样会造成很多重复和混乱的代码。

如今TensorFlow 2.0正在摆脱tf.layers,重用Keras 层,可以说如果你使用TensorFlow2.0,那么使用Keras构建深度学习模型是你的不二选择。

详细介绍请看文后第二篇文章《以后我们再也离不开Kera了》。

另外tf.contrib的各种项目也已经被合并到Keras等核心API 中,或者移动到单独的项目中,还有一些将被删除。

可以说TensorFlow 2.0会更好地组织API,使编码更简洁。

4 学习TensorFlow2.0的建议

不管你是AI小白,还是已经学习很久的大神,对于TensorFlow2.0,我们或许都需要重新学,因为它的变化太多了。当你学习TensorFlow2.0时,有如下建议供你参考:

首先不要上来就是import tensorflow as tf。其实没有必要,我建议大家先把数据预处理先学会了。比如数据你怎么read,怎么数据增强。

这个可以查看文后第三篇文章《数据读取与使用方式》。

这篇文章介绍了Tensorflow2.0读取数据的二种方式,分别是Keras API和Dataset类对数据预处理。

另外对于数据导入方式,最好使用Dataset类,个人认为这个比较方便。一个简单的例子如下:

import tensorflow as tf
import tensorflow_datasets as tfds
dataset, metadata = tfds.load('fashion_mnist', as_supervised=True, with_info=True)
train_dataset, test_dataset = dataset['train'], dataset['test']
train_dataset = train_dataset.shuffle(100).batch(12).repeat()
for img, label in train_dataset.take(1):img = img.numpy()print(img.shape)print(img)

从上面的代码我们可以看出在2.0中导入数据没有make_one_shot_iter() 这样的方法了。这个方法已经被弃用了,直接用 take(1)。

当你学会了读取数据和数据增强后,你就需要学会如何使用TensorFlow2.0构建网络模型,在TensorFlow2.0中搭建网络模型主要使用的就是Keras高级API。

如果你想要学会这个本领,可以参考文后的第四篇文章《如何搭建网络模型》。

在这篇文章我们详细介绍了如何使用Keras API搭建线性模型VGG16和非线性模型Resnet。如果你是AI小白,想要更好的掌握TensorFlow2.0,建议你使用TensorFlow2.0完成搭建VGG、GoogLeNet、Resnet等模型,这样对你掌握深度学习框架和网络结构更有帮助。

当你完成了数据读取和模型搭建后,现在你需要做的就是训练模型和可视化了。一个简单的示例如下:

import tensorflow as tf
from tensorflow.keras.callbacks import TensorBoard
from tensorflow.keras.optimizers import SGD
from tensorflow.keras.preprocessing.image import ImageDataGeneratormodel = tf.keras.models.Sequential([tf.keras.layers.Conv2D(12, (3,3), activation='relu', input_shape=(48, 48, 3),strides=(2, 2), padding='same'),tf.keras.layers.BatchNormalization(axis=3),tf.keras.layers.Conv2D(24, (3,3), activation='relu',strides=(2, 2), padding='same'),tf.keras.layers.BatchNormalization(axis=3),tf.keras.layers.Conv2D(48, (3,3), activation='relu',strides=(2, 2), padding='same'),tf.keras.layers.BatchNormalization(axis=3),tf.keras.layers.Flatten(),tf.keras.layers.Dense(128, activation='relu'),tf.keras.layers.Dense(1, activation='sigmoid')
])model.compile(loss='binary_crossentropy',optimizer = SGD(lr=0.001, decay=1e-6, momentum=0.9),metrics=['acc'])
train_datagen = ImageDataGenerator(rescale=1/255, shear_range=0.2,zoom_range=0.2, horizontal_flip=True)
validation_datagen = ImageDataGenerator(rescale=1/255)
train_generator = train_datagen.flow_from_directory(r"D://Learning//tensorflow_2.0//data//train",  # 训练集的根目录target_size=(48, 48),  # 所有图像的分辨率将被调整为48x48batch_size=32,        # 每次读取32个图像# 类别模式设为二分类class_mode='binary')# 对验证集做同样的操作
validation_generator = validation_datagen.flow_from_directory(r"D://Learning//tensorflow_2.0//data//val",target_size=(48, 48),batch_size=16,class_mode='binary')
history = model.fit_generator(train_generator,steps_per_epoch=28,epochs=500,verbose=1,validation_data = validation_generator,callbacks=[TensorBoard(log_dir=(r"D:Learninglogs"))],validation_steps=6)

上面简单示例的数据集是我们框架系列文章一直所用的表情二分类数据集。从上面的代码我们可以看出从数据读取到模型定义再到训练和可视化基本用的都是Keras 高级API,这里不再赘述。需要下载数据集的请移步github。

acc和loss可视化结果如下两图,可以看出效果还是比较可以的,上面的代码已经同步到有三AI的GitHub项目,如下第一个。

98ac2821d8667e5f3948dffa2007547d.png

b5b4d3f88cc4a72f4afc4f98db32174c.png

5 TensorFlow2.0优秀的github

1、https://github.com/tangxingwang/yousan.ai
1、https://github.com/czy36mengfei/tensorflow2_tutorials_chinese
3、https://github.com/jinfagang/yolov3_tf2

总结

本期我们总结了TensorFlow2.0的变化及使用方法,而且还介绍了学习它的方法和一些比较好的Github。希望您尽快能掌握它!

往期

  • 有三AI一周年了,说说我们的初衷,生态和愿景
  • 【TensorFlow2.0】TensorFlow2.0专栏上线,你来吗?
  • 【TensorFlow2.0】以后我们再也离不开Keras了?
  • 【TensorFlow2.0】数据读取与使用方式
  • 【TensorFlow2.0】如何搭建网络模型?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Facial Landmark Detection(人脸特征点检测)

原文地址&#xff1a;http://www.learnopencv.com/facial-landmark-detection/#comment-2471797375 作为计算机视觉研究员&#xff0c;我们很早就开始研究人脸。人脸分析领域最广为人知的就是人脸识别&#xff08;face recognition&#xff09;.但是为了识别一幅图像中的人脸&…

cpu卡操作协议iso14443协议

http://baike.baidu.com/link?url3mef2ZMRoNuBrVLA2HpEh8xrBtzACdIi5nIDUsMyVkA8OulIXGWgswvFcTiBfh_B转载于:https://www.cnblogs.com/shuenjian901/p/3496331.html

Python 字符串的内置函数

方法描述string.capitalize()把字符串的第一个字符大写string.center(width)返回一个原字符串居中,并使用空格填充至长度 width 的新字符串string.count(str, beg0, endlen(string))返回 str 在 string 里面出现的次数&#xff0c;如果 beg 或者 end 指定则返回指定范围内 str …

Java中的Error和Exceptiond的异同点

Error和Exception的异同点&#xff1a; &#xff08;1&#xff09;Error类和Exception类都继承超类Java.lang.Throwable &#xff08;2&#xff09;Error&#xff1a;一般指与虚拟机相关的问题&#xff0c;如系统崩溃&#xff0c;内存溢出等。对于这类错误&#xff0c;仅靠程序…

python算法题_python基本算法题(一)

1、3位水仙花数计算 "3位水仙花数”是指一个三位整数&#xff0c;其各位数字的3次方和等于该数本身。 例如&#xff1a; ABC是一个“3位水仙花数”&#xff0c;则&#xff1a;A的3次方&#xff0b;B的3次方&#xff0b;C的3次方 ABC。 使用Python&#xff0c;输出所有的3…

虚拟机环境下安装ESX不能安装虚拟系统解决方案

在虚拟机环境&#xff08;ESX、workstation等&#xff09;下安装ESX或workstation等虚拟机&#xff0c;在虚拟机上再安装操作系统&#xff0c;会提示“虚拟系统不能启动&#xff0c;直到你配置了外部虚拟机&#xff08;vmware esx in a virtual machine requires the outer vir…

superviseddescent (SDM C++11实现)环境配置

今天试着用了一下SDM的C11实现&#xff0c;本来以为挺简单的&#xff0c;可是配置环境还是花了一些时间。为了给自己留下一些记忆&#xff0c;特把配置过程记录下来。 这个实现是C11的版本&#xff0c;是一个通用版本&#xff0c;里面包含了很多的功能&#xff0c;比如函数的最…

1008: University

台州ACM&#xff1a;1008: University Description 在大学里&#xff0c;非常多单词都是一词多义。偶尔在文章里还要用引申义。这困扰Redraiment非常长的时间。 他開始搜集那些单词的全部意义。他发现了一些规律&#xff0c;比如 “a”能用“e”来取代, “c”能用“f”来取代……

Android 5.1 API 22 所有sdk文件下载地址

开源中国的 IT 公司开源软件整理计划介绍 https://dl-ssl.google.com/android/repository/docs-22_r01.ziphttp://dl.google.com/android/repository/android-22_r01.ziphttps://dl-ssl.google.com/android/repository/samples-22_r05.ziphttps://dl-ssl.google.com/android/re…

python图形小游戏代码_手把手制作Python小游戏:俄罗斯方块(一)

手把手制作Python小游戏&#xff1a;俄罗斯方块1大家好&#xff0c;新手第一次写文章&#xff0c;请多多指教 A.准备工作&#xff1a; 这里我们运用的是Pygame库&#xff0c;因为Python没有内置&#xff0c;所以需要下载 如果没有pygame&#xff0c;可以到官网下载 pygame官网&…

关于Git使用的一些心得

2019独角兽企业重金招聘Python工程师标准>>> 本篇稍微记录下Git使用的一些心得。 对Git的使用&#xff0c;应该是从搭建自己的博客开始的。当时看到开源中国推荐的一篇基于码云hexo搭建自己博客的文章。所以就花了一天时间鼓捣了下博客。 顺带整理下目前能看到我写的…

Dlib机器学习库安装

昨天使用了一下dlib的人脸检测功能&#xff0c;效果出奇的好。下面给出dlib整个的安装过程和使用指导。 下载安装 我们可以从dlib的官网下载最新的版本&#xff0c;我的是dlib18.18.然后我们需要使用cmake编译dlib库和examples示例。 当然前提是你要按照好cmake和opencv。 …

struts2上传

今天在使用struts2上传的过程中无意发现,struts2上传一个文件大小为0字节的文本竟然会报错FileNotFoundException,尝试了好久也没找到答案,最后只能判断文件的大小后上传,至于文件字节为0的怎么处理就看各位了 struts2上传java源码 1 package com.jzgx.web.action;2 3 import j…

BitSet之为什么用long保存信息

BitSet内部使用long[] words来保存位信息。咋看之下并不理解原因&#xff0c;在解读set(int bitIndex)之后似乎有了一些领悟。 public void set(int bitIndex) { if (bitIndex < 0) throw new IndexOutOfBoundsException("bitIndex < 0: " bitIndex); //用来计…

ipv4地址是几位二进制数_几张思维导图,让你清楚的知道ip地址怎么回事?

网络工程中&#xff0c;ip地址是必须要了解的内容&#xff0c;今天我们用几张思维导图来给大家详细讲解IP地址。一、什么是IP地址在生活中我们使用具有上网功能的电子设备都有IP地址&#xff0c;就跟每个人都有自己的名字一样。IP地址分为IPV4 IPV6&#xff0c;我们所说的的IP地…

《关系营销2.0——社交网络时代的营销之道》一检查拼写和语法

本节书摘来异步社区《关系营销2.0——社交网络时代的营销之道》一书中的第2章&#xff0c;作者&#xff1a; 【美】Mari Smith 译者&#xff1a; 张猛 , 于宏 , 赵俐 责编&#xff1a; 陈冀康, 更多章节内容可以访问云栖社区“异步社区”公众号查看。 检查拼写和语法 关系营销2…

dlib人脸检测功能介绍

本文主要介绍三个点&#xff1a; 1. 如何单独建立一个工程&#xff0c;使用dlib的人脸检测功能。 2. 提高人脸检测率的两个方法 3. 加速人脸检测的方法 下面围绕这几个点展开叙述。 建人脸检测工程 1 . 首先我们先使用上期说的examples里的人脸检测。 我们只要将face_de…

ios网络开发 网络状态检查

http://www.cnblogs.com/hanjun/archive/2012/12/01/2797622.html 网络连接中用到的类&#xff1a; 一.Reachability 1.添加 Reachability 的.h和.m文件&#xff0c;再添加SystemConfiguration.framework。 2.Reachability中定义了三种网络状态&#xff1a; typedef Num{ NotR…

delphi xe4 ini文件不能读取的解决方法

今天发现用inifiles下 tinifile.readstring方法突然不能读数据了&#xff0c;结果把ini文件格式由utf-8改成unicode后就能正常读取了。转载于:https://www.cnblogs.com/liqiao/p/3503985.html

《众妙之门——网页排版设计制胜秘诀》——3.4 展现品牌视觉的同时保持网页的可读性...

本节书摘来自异步社区《众妙之门——网页排版设计制胜秘诀》一书中的第3章&#xff0c;第3.4节&#xff0c;作者&#xff1a; 【德】Smashing Magazine 译者&#xff1a; 侯景艳 , 范辰 更多章节内容可以访问云栖社区“异步社区”公众号查看。 3.4 展现品牌视觉的同时保持网页的…