keras.layer.input()用法说明

tenserflow建立网络由于先建立静态的graph,所以没有数据,用placeholder来占位好申请内存。

那么keras的layer类其实是一个方便的直接帮你建立深度网络中的layer的类。

该类继承了object,是个基础的类,后续的诸如input_layer类都会继承与layer

由于model.py中利用这个方法建立网络,所以仔细看一下:他的说明详尽而丰富。

input()这个方法是用来初始化一个keras tensor的,tensor说白了就是个数组。他强大到之通过输入和输出就能建立一个keras模型。shape或者batch shape 必须只能给一个。shape = [None,None,None],会创建一个?*?*?的三维数组。

下面还举了个例子,a,b,c都是keras的tensor, `model = Model(input=[a, b], output=c)`

def Input(shape=None, batch_shape=None,
     name=None, dtype=None, sparse=False,
     tensor=None):
  """`Input()` is used to instantiate a Keras tensor.
  A Keras tensor is a tensor object from the underlying backend
  (Theano, TensorFlow or CNTK), which we augment with certain
  attributes that allow us to build a Keras model
  just by knowing the inputs and outputs of the model.
  For instance, if a, b and c are Keras tensors,
  it becomes possible to do:
  `model = Model(input=[a, b], output=c)`
  The added Keras attributes are:
    `_keras_shape`: Integer shape tuple propagated
      via Keras-side shape inference.
    `_keras_history`: Last layer applied to the tensor.
      the entire layer graph is retrievable from that layer,
      recursively.
  # Arguments
    shape: A shape tuple (integer), not including the batch size.
      For instance, `shape=(32,)` indicates that the expected input
      will be batches of 32-dimensional vectors.
    batch_shape: A shape tuple (integer), including the batch size.
      For instance, `batch_shape=(10, 32)` indicates that
      the expected input will be batches of 10 32-dimensional vectors.
      `batch_shape=(None, 32)` indicates batches of an arbitrary number
      of 32-dimensional vectors.
    name: An optional name string for the layer.
      Should be unique in a model (do not reuse the same name twice).
      It will be autogenerated if it isn't provided.
    dtype: The data type expected by the input, as a string
      (`float32`, `float64`, `int32`...)
    sparse: A boolean specifying whether the placeholder
      to be created is sparse.
    tensor: Optional existing tensor to wrap into the `Input` layer.
      If set, the layer will not create a placeholder tensor.
  # Returns
    A tensor.
  # Example
  ```python
  # this is a logistic regression in Keras
  x = Input(shape=(32,))
  y = Dense(16, activation='softmax')(x)
  model = Model(x, y)
  ```
  """

tip:我们在model.py中用到了shape这个attribute,

 input_image = KL.Input(
      shape=[None, None, config.IMAGE_SHAPE[2]], name="input_image")
    input_image_meta = KL.Input(shape=[config.IMAGE_META_SIZE],
                  name="input_image_meta")

阅读input()里面的句子逻辑:

可以发现,进入if语句的情况是batch_shape不为空,并且tensor为空,此时进入if,用assert判断如果shape不为空,那么久会有错误提示,告诉你要么输入shape 要么输入batch_shape, 还提示你shape不包含batch个数,就是一个batch包含多少张图片。

那么其实如果tensor不空的话,我们可以发现,也会弹出这个提示,但是作者没有写这种题型,感觉有点没有安全感。注意点好了

  if not batch_shape and tensor is None:
    assert shape is not None, ('Please provide to Input either a `shape`'
                  ' or a `batch_shape` argument. Note that '
                  '`shape` does not include the batch '
                  'dimension.')

如果单纯的按照规定输入shape,举个例子:只将shape输入为None,也就是说tensor的dimension我都不知道,但我知道这是个向量,你看着办吧。

input_gt_class_ids = KL.Input(
shape=[None], name="input_gt_class_ids", dtype=tf.int32)

就会调用Input()函数中的这个判断句式,注意因为shape是个List,所以shape is not None 会返回true。同时有没有输入batch_shape的话,就会用shape的参数去创造一个batch_shape.

if shape is not None and not batch_shape:
batch_shape = (None,) + tuple(shape)

比如如果输入:

shape = (None,)
batch_shape = (None,)+shape
batch_shape
#会得到(None, None)

可以发现,这里要求使用者至少指明你的数据维度,比如图片的话,是三维的,所以shape至少是[None,None,None],而且我认为shape = [None,1] 与shape = [None]是一样的都会创建一个不知道长度的向量。

以上这篇keras.layer.input()用法说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Keras 使用 Lambda层详解

    我就废话不多说了,大家还是直接看代码吧! from tensorflow.python.keras.models import Sequential, Model from tensorflow.python.keras.layers import Dense, Flatten, Conv2D, MaxPool2D, Dropout, Conv2DTranspose, Lambda, Input, Reshape, Add, Multiply from tensorflow.python.ker

  • 使用keras实现孪生网络中的权值共享教程

    首先声明,这里的权值共享指的不是CNN原理中的共享权值,而是如何在构建类似于Siamese Network这样的多分支网络,且分支结构相同时,如何使用keras使分支的权重共享. Functional API 为达到上述的目的,建议使用keras中的Functional API,当然Sequential 类型的模型也可以使用,本篇博客将主要以Functional API为例讲述. keras的多分支权值共享功能实现,官方文档介绍 上面是官方的链接,本篇博客也是基于上述官方文档,实现的此功能.(插

  • keras 获取某层的输入/输出 tensor 尺寸操作

    获取单输入尺寸,该层只被使用了一次. import keras from keras.layers import Input, LSTM, Dense, Conv2D from keras.models import Model a = Input(shape=(32, 32, 3)) b = Input(shape=(64, 64, 3)) conv = Conv2D(16, (3, 3), padding='same') conved_a = conv(a) # 到目前为止只有一个输入,以下

  • 使用Keras加载含有自定义层或函数的模型操作

    当我们导入的模型含有自定义层或者自定义函数时,需要使用custom_objects来指定目标层或目标函数. 例如: 我的一个模型含有自定义层"SincConv1D",需要使用下面的代码导入: from keras.models import load_model model = load_model('model.h5', custom_objects={'SincConv1D': SincConv1D}) 如果不加custom_objects指定目标层Layer,则会出现以下报错:

  • keras.layer.input()用法说明

    tenserflow建立网络由于先建立静态的graph,所以没有数据,用placeholder来占位好申请内存. 那么keras的layer类其实是一个方便的直接帮你建立深度网络中的layer的类. 该类继承了object,是个基础的类,后续的诸如input_layer类都会继承与layer 由于model.py中利用这个方法建立网络,所以仔细看一下:他的说明详尽而丰富. input()这个方法是用来初始化一个keras tensor的,tensor说白了就是个数组.他强大到之通过输入和输出就能

  • 浅谈keras中的keras.utils.to_categorical用法

    如下所示: to_categorical(y, num_classes=None, dtype='float32') 将整型标签转为onehot.y为int数组,num_classes为标签类别总数,大于max(y)(标签从0开始的). 返回:如果num_classes=None,返回len(y) * [max(y)+1](维度,m*n表示m行n列矩阵,下同),否则为len(y) * num_classes.说出来显得复杂,请看下面实例. import keras ohl=keras.utils

  • keras中的backend.clip用法

    如下所示: keras.backend.clip(x, min_value, max_value) 逐元素clip(将超出指定范围的数强制变为边界值) 参数 x: 张量或变量. min_value: Python 浮点或整数. max_value: Python 浮点或整数. 返回 一个张量. import tensorflow as tf from keras import backend a = tf.constant(2.1) #定义tensor常量 b = backend.clip(a,

  • keras实现多种分类网络的方式

    Keras应该是最简单的一种深度学习框架了,入门非常的简单. 简单记录一下keras实现多种分类网络:如AlexNet.Vgg.ResNet 采用kaggle猫狗大战的数据作为数据集. 由于AlexNet采用的是LRN标准化,Keras没有内置函数实现,这里用batchNormalization代替 收件建立一个model.py的文件,里面存放着alexnet,vgg两种模型,直接导入就可以了 #coding=utf-8 from keras.models import Sequential f

  • keras小技巧——获取某一个网络层的输出方式

    前言: keras默认提供了如何获取某一个层的某一个节点的输出,但是没有提供如何获取某一个层的输出的接口,所以有时候我们需要获取某一个层的输出,则需要自己编写代码,但是鉴于keras高层封装的特性,编写起来实际上很简单,本文提供两种常见的方法来实现,基于上一篇文章的模型和代码: keras自定义回调函数查看训练的loss和accuracy 一.模型加载以及各个层的信息查看 从前面的定义可知,参见上一篇文章,一共定义了8个网络层,定义如下: model.add(Convolution2D(filt

  • 浅谈keras中的Merge层(实现层的相加、相减、相乘实例)

    [题目]keras中的Merge层(实现层的相加.相减.相乘) 详情请参考: Merge层 一.层相加 keras.layers.Add() 添加输入列表的图层. 该层接收一个相同shape列表张量,并返回它们的和,shape不变. Example import keras input1 = keras.layers.Input(shape=(16,)) x1 = keras.layers.Dense(8, activation='relu')(input1) input2 = keras.la

  • Keras设置以及获取权重的实现

    layer的两个函数: get_weights(), set_weights(weights). 详情请参考about-keras-layers. 补充知识:Keras层的共同函数 关于Keras层: 所有Keras层都有很多共同的函数: layer.get_weights(): # 以Numpy矩阵的形式返回层的权重. layer.set_weights(weights): # 从Numpy矩阵中设置层的权重(与get_weights的输出形状相同). layer.get_config():

  • tensorflow2.0教程之Keras快速入门

    Keras 是一个用于构建和训练深度学习模型的高阶 API.它可用于快速设计原型.高级研究和生产. keras的3个优点: 方便用户使用.模块化和可组合.易于扩展 1.导入tf.keras tensorflow2推荐使用keras构建网络,常见的神经网络都包含在keras.layer中(最新的tf.keras的版本可能和keras不同) import tensorflow as tf from tensorflow.keras import layers print(tf.__version__

  • 解读tf.keras.layers模块中的函数

    目录 tf.keras.layers模块中的函数 汇总tf.keras模型层layers 卷积网络相关层 总结 tf.keras.layers模块中的函数 from __future__ import print_function as _print_function import sys as _sys from . import experimental from tensorflow.python.keras.engine.base_layer import Layer from tens

  • 浅谈Keras中shuffle和validation_split的顺序

    模型的fit函数有两个参数,shuffle用于将数据打乱,validation_split用于在没有提供验证集的时候,按一定比例从训练集中取出一部分作为验证集 这里有个陷阱是,程序是先执行validation_split,再执行shuffle的,所以会出现这种情况: 假如你的训练集是有序的,比方说正样本在前负样本在后,又设置了validation_split,那么你的验证集中很可能将全部是负样本 同样的,这个东西不会有任何错误报出来,因为Keras不可能知道你的数据有没有经过shuffle,保险

随机推荐