1 回答

TA貢獻1824條經驗 獲得超6個贊
那么為什么我們需要輸入一個額外的張量
簡短的回答是,TensorFlow 不知道在您期望的輸入之間建立聯系。出現問題是因為您將 Model (而不是Layer)傳遞給您的TimeDistributed圖層。這會留下Input你的model1懸掛層,除非你明確地向它傳遞一個輸入。該TimeDistributed層不夠智能,無法以這種方式處理模型。
我的解決方案取決于以下問題的答案,
你為什么需要model1?它只有一層Conv2D。你可以輕松做到
sequence_embedding = tf.keras.layers.TimeDistributed(
tf.keras.layers.Conv2D(filters=32, kernel_size=3, strides=1,name='cov1'),
name='time_dis1'
)
如果你這樣做,現在你必須改變以下幾行,
model1_output_layer = model2.get_layer('time_dis1').layer.get_layer('cov1')
output1 = model1_output_layer.get_output_at(0)
類似的東西(你想要的確切輸出將取決于你實際追求的是什么)
model1_output_layer = model2.get_layer('time_dis1')
output1 = model1_output_layer.output
# This output1 may need further processing depending on what you need
# e.g. if you need mean embeddings over time axis
output_mean = tf.keras.layers.Average(output1, axis=1)
這是因為您無法訪問層嵌套的層的輸出TimeDistributed。因為傳遞給圖層的圖層TimeDistributed實際上并沒有做任何事情。而且它沒有定義的output. 它只是作為圖層的模板放在那里,TimeDistributed使用它來計算輸出。因此,要從一個層獲取輸出TimeDistributed,您需要通過該層訪問它。
你試著按照你擁有的方式去做(而不是我的方式),你會得到,
AttributeError: Layer cov1 has no inbound nodes.
你可能會問,“為什么它以前有效”?
這是因為,在你有一個Modelthere 而不是Layer. 因為層被模型包裹起來了,所以定義了Conv2D層(因為它有層)。這又回到了原因,為什么它在嘗試定義.outputInputInputmodel1submodel
我知道這個解釋可能會讓你頭暈目眩,因為這個錯誤背后的原因非常復雜。但通過它幾次有望有所幫助。
添加回答
舉報