簡體   English   中英

我將如何 go 關於更改 Alex 網絡的 input_shape(使用 tf-keras)?

[英]How would I go about changing the input_shape for Alex net (with tf-keras)?

這是代碼:

def AlexNet(log_path, save_path, input_shape):
# code source => 'engmrk.com/alexnet-implementation-using-keras'
# model definition
model = models.Sequential()

# 1st Convolutional Layer
model.add(layers.Conv2D(filters=96, input_shape=(INPUT_SHAPE), kernel_size=(11,11), strides=(4,4), padding='valid'))
model.add(layers.Activation('relu'))
# Max Pooling
model.add(layers.MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='valid'))

# 2nd Convolutional Layer
model.add(layers.Conv2D(filters=256, kernel_size=(11,11), strides=(1,1), padding='valid'))
model.add(layers.Activation('relu'))
# Max Pooling
model.add(layers.MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='valid'))

# 3rd Convolutional Layer
model.add(layers.Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), padding='valid'))
model.add(layers.Activation('relu'))

# 4th Convolutional Layer
model.add(layers.Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), padding='valid'))
model.add(layers.Activation('relu'))

# 5th Convolutional Layer
model.add(layers.Conv2D(filters=256, kernel_size=(3,3), strides=(1,1), padding='valid'))
model.add(layers.Activation('relu'))
# Max Pooling
model.add(layers.MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='valid'))

# Passing it to a Fully Connected layer
model.add(layers.Flatten())
# 1st Fully Connected Layer
model.add(layers.Dense(4096, input_shape=(input_shape[0] * input_shape[1] * input_shape[2],))
model.add(layers.Activation('relu'))
# Add Dropout to prevent overfitting
model.add(layers.Dropout(0.4))

# 2nd Fully Connected Layer
model.add(layers.Dense(4096))
model.add(layers.Activation('relu'))
# Add Dropout
model.add(layers.Dropout(0.4))

# 3rd Fully Connected Layer
model.add(layers.Dense(1000))
model.add(layers.Activation('relu'))
# Add Dropout
model.add(layers.Dropout(0.4))

# Output Layer
model.add(layers.Dense(17))
model.add(layers.Activation('softmax'))

model.summary()

當我嘗試將輸入形狀更改為 (91, 74, 3) 時,我收到此錯誤:

ValueError: Negative dimension size caused by subtracting 11 from 10 for '{{node conv2d_1/Conv2D}} = Conv2D[T=DT_FLOAT, data_format="NHWC", dilations=[1, 1, 1, 1], explicit_paddings=[], padding="VALID", strides=[1, 1, 1, 1], use_cudnn_on_gpu=true](max_pooling2d/Identity, conv2d_1/Conv2D/ReadVariableOp)' with input shapes: [?,19,10,96], [11,11,96,256].

現在,如果我想用具有輸入形狀的 RGB (91 * 74) 圖像數據集做 AlexNet,我將如何更改步幅和或 kernel_size --> (91, 74, 3)。

這甚至可能嗎,如果可以的話怎么辦?

謝謝....

卷積層和平均池化或最大池化層會減小圖像w, h的大小,因為您 go 深入網絡,如果您從小圖像開始,它可能最終具有沒有任何意義的負尺寸。 如果您想從小圖像開始嘗試刪除一些 max_pool 層或在 conv 層上使用padding="same"或只是減少網絡架構的深度。

示例:在第一層之后,形狀將是(21, 16, 96)
如何計算 output:對於valid填充,它是((W - F) / S) +1對於same的填充 output 形狀與輸入形狀相同,但通道數除外

暫無
暫無

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

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