我是人工智能/機器學習的新手。我正在學習 TensorFlow。在一些教程中,我注意到input_shape一個的論點Conv2D層只有第一個指定。代碼看起來有點像這樣:
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(16, (3,3), activation='relu',
input_shape=(300,300,3)),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(32, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dense(1, activation='sigmoid')
])
在許多示例中,不僅在上述示例中,教師并沒有在其中包含該引數。有什么原因嗎?
uj5u.com熱心網友回復:
下一層從上一層的輸出中匯出所需的形狀。也就是說,該MaxPooling2D層根據該層的輸出等推匯出其輸入形狀Conv2D。請注意,在您的順序模型中,您甚至不需要在第一層中定義 input_shape。input_shape如果您提供真實資料,它能夠推導出來,這為您提供了更大的靈活性,因為您不必對輸入形狀進行硬編碼:
import tensorflow as tf
tf.random.set_seed(1)
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(16, (3,3), activation='relu',),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(32, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dense(1, activation='sigmoid')
])
print(model(tf.random.normal((1, 300, 300, 3))))
tf.Tensor([[0.6059081]], shape=(1, 1), dtype=float32)
如果將形狀不正確的資料(例如 (300, 3) 而不是 (300, 300, 3))傳遞給您的模型,則會發生錯誤,因為Conv2D圖層需要 3D 輸入,不包括批次維度。input_shape但是,如果您的模型沒有,您將無法呼叫model.summary()以查看您的網路。首先,您必須使用輸入形狀構建模型:
model.build(input_shape=(1, 300, 300, 3))
model.summary()
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/361884.html
