TensorFlow 2.9的零零碎碎(一)-tf.keras里的兜兜转转

目录

tf.keras

TensorFlow 1的时代

TensorFlow 2(2.6之前)的时代

TensorFlow 2(2.6之后,含2.6)的时代

表面统一,背后杂乱

举几个例子

tf.keras.datasets.mnist

tf.keras.models.Sequential()

tf.keras.layers


TensorFlow和Keras就不过多介绍了。

反正记得对于很多人来说,TensorFlow+Keras的组合就够用了,并且也很好用。

tf.keras

深度学习系统里有一个很严重的问题,就是兼容性。这是因为深度学习系统里有很多的模块(构件、组件),并且很可能是不同的团队开发,比如TensorFlow和Keras。

TensorFlow 1的时代

TensorFlow 1和Keras互相独立,虽然在TensorFlow 1.1x的时候就整合了Keras,但整合进去的还不完善,所以当时得分别安装

pip install tensorflow
pip install keras

也要分别引用

import tensorflow
import keras

TensorFlow 2(2.6之前)的时代

TensorFlow 2(2.6之前)完成了对Keras 的整合,Keras变成了TensorFlow代码库的一部分。

安装变成了只安装TensorFlow即可,Keras不再作为独立的模块出现,而是TensorFlow的一部分。

pip install tensorflow

这个时候感觉代码的结构就已经比较混乱了。因为想使用Keras,有好多入口(调用方法)

比如

import tensorflow.keras.xxxx
import tensorflow.python.keras.xxx

TensorFlow 2(2.6之后,含2.6)的时代

种种原因,TensorFlow 2(2.6之后,含2.6),Keras的代码又独立出来了。

Tensorflow 2.6 的发行说明中指出,Keras 被拆分为单独的 PIP 包(keras),Keras代码已移至 GitHub 存储库 keras-team/keras,tf.keras 的 API 端点保持不变,但现在由 keras PIP 包支持。

对于用户来说,安装命令还是一样。

虽然命令一样,但实际的动作和TensorFlow 2(2.6之前)不一样了,执行这条命令除了安装Tensorflow模块之外,还会自动安装Keras模块(Keras模块从TensorFlow模块中拆分出来了)

pip install tensorflow

Tensorflow 2.6 的发行说明中还说明了tensorflow/python/keras 中的现有代码是一个陈旧的副本,将在未来版本 (2.7) 中删除。

应删除对 tensorflow.python.keras 的任何导入,并将它们替换为公共 tf.keras API。

所以应统一使用

import tensorflow.keras.xxxx

 

表面统一,背后杂乱

当然了,tensorflow和keras发展的过程中,分分合合,造成了很多历史遗留问题。虽然现在统一使用tensorflow.keras这个入口,但这个入口背后的代码却是层层跳转,显得非常复杂。

tensorflow.keras里定义了很多模块,比如layers、models

假设有一个模块叫tf.keras.xxx

CTRL+鼠标左键点击xxx无法跳转到定义

断点调试可以发现,tf.keras模块实际调用的是keras.api._v2.keras模块,

查看tf.keras的源码也佐证了这一点

_keras_module = "keras.api._v2.keras"
keras = _LazyLoader("keras", globals(), _keras_module)
_module_dir = _module_util.get_parent_dir_for_name(_keras_module)
if _module_dir:
  _current_module.__path__ = [_module_dir] + _current_module.__path__
setattr(_current_module, "keras", keras)

举几个例子

tf.keras.datasets.mnist

keras.api._v2.keras.datasets.mnist模块其实还不是最终节点,在其__init__.py中有定义

from keras.datasets.mnist import load_data

keras.datasets.mnist才是实现了mnist数据集操作的模块

我们主要用到的是读取数据集,即loda_data函数

tf.keras.models.Sequential()

来源于from keras.api._v2.keras import models

在keras.api._v2.keras.models的__init__.py中有定义

from keras.engine.sequential import Sequential

可以看出,Sequential其实是在keras.engine.sequential中实现的

tf.keras.layers

和tf.keras.models类似,都是定义在keras.api._v2.keras下,最终在keras.engine.xx或者keras.layers.xx中实现

例如ReLU,实际是在from keras.layers.activation.relu import ReLU中实现

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
boston_housing module: Boston housing price regression dataset. cifar10 module: CIFAR10 small images classification dataset. cifar100 module: CIFAR100 small images classification dataset. fashion_mnist module: Fashion-MNIST dataset. imdb module: IMDB sentiment classification dataset. mnist module: MNIST handwritten digits dataset. reuters module: Reuters topic classification dataset. import tensorflow as tf from tensorflow import keras fashion_mnist = keras.datasets.fashion_mnist (x_train, y_train), (x_test, y_test) = fashion_mnist.load_data() mnist = keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() cifar100 = keras.datasets.cifar100 (x_train, y_train), (x_test, y_test) = cifar100.load_data() cifar10 = keras.datasets.cifar10 (x_train, y_train), (x_test, y_test) = cifar10.load_data() imdb = keras.datasets.imdb (x_train, y_train), (x_test, y_test) = imdb.load_data() # word_index is a dictionary mapping words to an integer index word_index = imdb.get_word_index() # We reverse it, mapping integer indices to words reverse_word_index = dict([(value, key) for (key, value) in word_index.items()]) # We decode the review; note that our indices were offset by 3 # because 0, 1 and 2 are reserved indices for "padding", "start of sequence", and "unknown". decoded_review = ' '.join([reverse_word_index.get(i - 3, '?') for i in x_train[0]]) print(decoded_review) boston_housing = keras.datasets.boston_housing (x_train, y_train), (x_test, y_test) = boston_housing.load_data() reuters= keras.datasets.reuters (x_train, y_train), (x_test, y_test) = reuters.load_data() tf.keras.datasets.reuters.get_word_index( path='reuters_word_index.json' )

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值