[英]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 是正確的,我也是這樣做的
- 使用 Lamda 回調,答案將如下所示,您可以在使用名稱時跟蹤每一層。
[<KerasTensor: shape=(None, 1, 32, 32, 3) dtype=float32 (created by layer 'input_1')>]
<keras.engine.functional.Functional object at 0x0000016DB5CC51C0>
- Lamda Fn 當你做同樣的事情你有同樣的答案
[<KerasTensor: shape=(None, 1, 32, 32, 3) dtype=float32 (created by layer 'input_1')>]
<keras.engine.functional.Functional object at 0x0000016DB5CC51C0>
- 當您使用順序時,您也可以通過 model 屬性來完成
model = tf.keras.models.Sequential([
tf.keras.layers.InputLayer(input_shape=(1, 32, 32, 3)), ...
])
你可以用數組和序列屬性做更多的事情......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.