最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Keras實現(xiàn)支持masking的Flatten層代碼

 更新時間:2020年06月16日 14:19:12   作者:蕉叉熵  
這篇文章主要介紹了Keras實現(xiàn)支持masking的Flatten層代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

不知道為什么,我總是需要實現(xiàn)某種騷操作,而這種騷操作往往是Keras不支持的。例如,我有一個padding過的矩陣,那么它一定是帶masking的,然后我想要把它Flatten,再輸入到Dense層。然而Keras的Flatten層不支持masking。

Keras原本Flatten的實現(xiàn)

class Flatten(Layer):
 def __init__(self, **kwargs):
  super(Flatten, self).__init__(**kwargs)
  self.input_spec = InputSpec(min_ndim=3)

 def compute_output_shape(self, input_shape):
  if not all(input_shape[1:]):
   raise ValueError('The shape of the input to "Flatten" '
        'is not fully defined '
        '(got ' + str(input_shape[1:]) + '. '
        'Make sure to pass a complete "input_shape" '
        'or "batch_input_shape" argument to the first '
        'layer in your model.')
  return (input_shape[0], np.prod(input_shape[1:]))

 def call(self, inputs):
  return K.batch_flatten(inputs)

自定義支持masking的實現(xiàn)

事實上,Keras層的mask有時候是需要參與運(yùn)算的,比如Dense之類的,有時候則只是做某種變換然后傳遞給后面的層。Flatten屬于后者,因為mask總是與input有相同的shape,所以我們要做的就是在compute_mask函數(shù)里對mask也做flatten。

from keras import backend as K
from keras.engine.topology import Layer
import tensorflow as tf
import numpy as np

class MyFlatten(Layer):
 def __init__(self, **kwargs):
  self.supports_masking = True
  super(MyFlatten, self).__init__(**kwargs)

 def compute_mask(self, inputs, mask=None):
  if mask==None:
   return mask
  return K.batch_flatten(mask)

 def call(self, inputs, mask=None):
  return K.batch_flatten(inputs)

 def compute_output_shape(self, input_shape):
  return (input_shape[0], np.prod(input_shape[1:]))

正確性檢驗

from keras.layers import *
from keras.models import Model
from MyFlatten import MyFlatten
from MySumLayer import MySumLayer
from keras.initializers import ones

data = [[1,0,0,0],
  [1,2,0,0],
  [1,2,3,0],
  [1,2,3,4]]

A = Input(shape=[4]) # None * 4
emb = Embedding(5, 3, mask_zero=True, embeddings_initializer=ones())(A) # None * 4 * 3
fla = MyFlatten()(emb) # None * 12
out = MySumLayer(axis=1)(fla) # None * 1

model = Model(inputs=[A], outputs=[out])
print model.predict(data)

輸出:

[ 3. 6. 9. 12.]

補(bǔ)充知識:pytorch中的reshape()、view()、transpose()和flatten()

1、torch.reshape()

reshape()可以由torch.reshape(),也可由torch.Tensor.reshape()調(diào)用

其作用是在不改變tensor元素數(shù)目的情況下改變tensor的shape

import torch
import numpy as np
a = np.arange(24)
b = a.reshape(4,3,2)
print(np.shape(a))
print(b,np.shape(b))

'''結(jié)果
(24,)
[[[ 0 1]
 [ 2 3]
 [ 4 5]]

 [[ 6 7]
 [ 8 9]
 [10 11]]

 [[12 13]
 [14 15]
 [16 17]]

 [[18 19]
 [20 21]
 [22 23]]] (4, 3, 2)
'''

2、view()

view()只可以由torch.Tensor.view()來調(diào)用

view()和reshape()在效果上是一樣的,區(qū)別是view()只能操作contiguous的tensor,且view后的tensor和原tensor共享存儲,reshape()對于是否contiuous的tensor都可以操作。

3、transpose()

torch.transpose(input, dim0, dim1) -> Tensor

將輸入數(shù)據(jù)input的第dim0維和dim1維進(jìn)行交換

#官方例子
>>> x = torch.randn(2, 3)
>>> x
tensor([[ 0.9068, 1.8803, -0.5021],
  [-0.6576, 0.6334, -0.8961]])
>>> torch.transpose(x, 0, 1)
tensor([[ 0.9068, -0.6576],
  [ 1.8803, 0.6334],
  [-0.5021, -0.8961]])

4、flatten()

torch.flatten()的輸入是tensor

torch.flatten(input, start_dim=0, end_dim=-1) → Tensor

其作用是將輸入tensor的第start_dim維到end_dim維之間的數(shù)據(jù)“拉平”成一維tensor,

#官方例子
>>> t = torch.tensor([[[1, 2],
        [3, 4]],
        [[5, 6],
        [7, 8]]])
>>> torch.flatten(t)
tensor([1, 2, 3, 4, 5, 6, 7, 8])
>>> torch.flatten(t, start_dim=1)
tensor([[1, 2, 3, 4],
  [5, 6, 7, 8]])

torch.nn.Flatten()可以理解為一種網(wǎng)絡(luò)結(jié)構(gòu),類似Conv2d、Linear。一般放在卷積層和全連接層之間,將卷積層輸出“拉平”成一維,

>>> m = torch.nn.Sequential(
 torch.nn.Conv2d(1, 32, 5, 1, 1),
 torch.nn.Flatten(),
 torch.nn.Linear(160,10))
>>> m
Sequential(
 (0): Conv2d(1, 32, kernel_size=(5, 5), stride=(1, 1), padding=(1, 1))
 (1): Flatten()
 (2): Linear(in_features=160, out_features=10, bias=True)
)

以上這篇Keras實現(xiàn)支持masking的Flatten層代碼就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解解Django 多對多表關(guān)系的三種創(chuàng)建方式

    詳解解Django 多對多表關(guān)系的三種創(chuàng)建方式

    本文主要介紹了詳解解Django 多對多表關(guān)系的三種創(chuàng)建方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • python?GUI編程實現(xiàn)掃雷游戲

    python?GUI編程實現(xiàn)掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了python?GUI編程實現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Python多線程編程之threading模塊詳解

    Python多線程編程之threading模塊詳解

    這篇文章主要介紹了Python多線程編程之threading模塊詳解,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Python 列表(List)操作方法詳解

    Python 列表(List)操作方法詳解

    這篇文章主要介紹了Python中列表(List)的詳解操作方法,包含創(chuàng)建、訪問、更新、刪除、其它操作等,需要的朋友可以參考下
    2014-03-03
  • Python實現(xiàn)批量填補(bǔ)遙感影像的無效值NoData

    Python實現(xiàn)批量填補(bǔ)遙感影像的無效值NoData

    這篇文章主要為大家介紹了如何基于Python中ArcPy模塊,對大量柵格遙感影像文件批量進(jìn)行無效值(NoData值)填充的方法,感興趣的小伙伴可以了解一下
    2023-06-06
  • 基于python實現(xiàn)藍(lán)牙通信代碼實例

    基于python實現(xiàn)藍(lán)牙通信代碼實例

    這篇文章主要介紹了基于python實現(xiàn)藍(lán)牙通信代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • django聯(lián)系人登錄界面案例詳解

    django聯(lián)系人登錄界面案例詳解

    在本案例中,將介紹如何使用Django框架創(chuàng)建一個簡單的聯(lián)系人登錄界面,案例涉及前端HTML頁面設(shè)計,CSS和JS的應(yīng)用,以及后端views.py的編寫,在后端處理中,密碼將通過MD5進(jìn)行加密,保證安全性,本文給大家介紹了django聯(lián)系人登錄界面案例詳解,感興趣的朋友一起看看吧
    2024-10-10
  • 在Python中使用異步Socket編程性能測試

    在Python中使用異步Socket編程性能測試

    異步網(wǎng)絡(luò)據(jù)說能極大的提高網(wǎng)絡(luò)server的連接速度,所以打算寫一個專題,來學(xué)習(xí)和了解異步網(wǎng)絡(luò).因為Python有個非常出名的異步Lib:Twisted,所以就用Python來完成.
    2014-06-06
  • windows10在visual studio2019下配置使用openCV4.3.0

    windows10在visual studio2019下配置使用openCV4.3.0

    這篇文章主要介紹了windows10在visual studio2019下配置使用openCV4.3.0,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Python創(chuàng)建自己的加密貨幣的示例

    Python創(chuàng)建自己的加密貨幣的示例

    這篇文章主要介紹了Python創(chuàng)建自己的加密貨幣的示例,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03

最新評論

泰顺县| 石河子市| 睢宁县| 文山县| 寿光市| 淳化县| 洞头县| 舒兰市| 仁化县| 行唐县| 井冈山市| 寿阳县| 固始县| 始兴县| 黔西县| 精河县| 扎赉特旗| 沭阳县| 中牟县| 大方县| 佛冈县| 夏津县| 万年县| 闽侯县| 晋城| 奈曼旗| 左云县| 正定县| 思茅市| 洞头县| 澜沧| 宣武区| 南部县| 连云港市| 延安市| 达孜县| 井研县| 奈曼旗| 灌阳县| 方山县| 东乡族自治县|