簡體   English   中英

連接來自 Keras 多個層的多個特征

[英]Concatenate multiple features from Keras multiple layers

我收到以下錯誤

ValueError: as_list() is not defined on an unknown TensorShape.

我的代碼看起來像這樣

# define input
X_input = Input(shape=(n_features, n_channels))
   
# define features extractor model
features = Lambda(
    function=extract_features_lambda,
    output_shape=(None,)
)(X_input)

# CNN block
X = Reshape((n_steps, n_length, n_channels))(X_input)
    
X = TimeDistributed(
    Conv1D(filters=32, kernel_size=5, activation='relu'),
    input_shape=(None, n_length, n_features)
)(X)
    
X = TimeDistributed(
    Conv1D(filters=64, kernel_size=7, activation='relu')
)(X)

X = TimeDistributed(
    Conv1D(filters=32, kernel_size=5, activation='relu')
)(X)

X = TimeDistributed(Dropout(0.5))(X)
X = TimeDistributed(MaxPooling1D(pool_size=2))(X)
X = Flatten()(X)
    
# merge the 2 features
X = Concatenate()([features, X])

Lambda 層包含自定義特征提取器 function。 這會計算一些特征並返回 numpy 數組。 模板 function 看起來像這樣

def extract_features(X):
    features = np.zeros(29, X.shape[1])

    # compute the features ...

    return features.flatten()

def extract_features_lambda(X):
    features = tf.py_function(
        extract_features,
        [X],
        tf.float32
    )
    
    features.set_shape = ((None, 29*12))
    
    return features

我做錯了什么?

您使用可以自定義的自定義 Fn Lamda 是正確的,我也是這樣做的

  1. 使用 Lamda 回調,答案將如下所示,您可以在使用名稱時跟蹤每一層。
[<KerasTensor: shape=(None, 1, 32, 32, 3) dtype=float32 (created by layer 'input_1')>]

<keras.engine.functional.Functional object at 0x0000016DB5CC51C0>

  1. Lamda Fn 當你做同樣的事情你有同樣的答案
 [<KerasTensor: shape=(None, 1, 32, 32, 3) dtype=float32 (created by layer 'input_1')>]
<keras.engine.functional.Functional object at 0x0000016DB5CC51C0>
  1. 當您使用順序時,您也可以通過 model 屬性來完成
model = tf.keras.models.Sequential([                    
tf.keras.layers.InputLayer(input_shape=(1, 32, 32, 3)), ...         
])

你可以用數組和序列屬性做更多的事情......

簡單映射目標編碼 簡單映射目標編碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM