繁体   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