1. 程式人生 > 程式設計 >keras slice layer 層實現方式

keras slice layer 層實現方式

注意的地方: keras中每層的輸入輸出的tensor是張量, 比如Tensor shape是(N,H,W,C),對於tf後臺, channels_last

Define a slice layer using Lamda layer
def slice(x,h1,h2,w1,w2):
 """ Define a tensor slice function
 """
 return x[:,h1:h2,w1:w2,:]

定義完slice function之後,利用lambda layer新增到定義的網路中去

# Add slice layer
slice_1 = Lambda(slice,arguments={'h1': 0,'h2': 6,'w1': 0,'w2': 6})(sliced)
# As for tensorfow backend,Lambda doesn't need output shape argument
slice_2 = Lambda(slice,'w1': 6,'w2': 12})(sliced)

補充知識:tensorflow和keras張量切片(slice)

Notes

想將一個向量keras slice layer 層實現方式 分割成兩部分:keras slice layer 層實現方式 操作大概是:

keras slice layer 層實現方式

在 TensorFlow 中,用 tf.slice 實現張量切片,Keras 中自定義 Lambda 層實現。

TensorFlow

tf.slice(input_,begin,size,name=None)

input_:tf.tensor,被操作的 tensor

begin:list,各個維度的開始下標

size:list,各個維度上要截多長

import tensorflow as tf

with tf.Session() as sess:
 a = tf.constant([1,2,3,4,5])
 b = tf.slice(a,[0],[2]) # 第一個維度從 0 開始,截 2 個
 c = tf.slice(a,[2],[3]) # 第一個維度從 2 開始,截 3 個
 print(a.eval())
 print(b.eval())
 print(c.eval())

輸出

[1 2 3 4 5]
[1 2]
[3 4 5]

Keras

from keras.layers import Lambda
from keras.models import Sequential
import numpy as np

a = np.array([[1,5]])
model = Sequential([
 Lambda(lambda a: a[:,:2],input_shape=[5]) # 第二維截前 2 個
])

print(model.predict(a))

輸出

[[1. 2.]]

以上這篇keras slice layer 層實現方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。