gpt4 book ai didi

python - 即使调整了密度、激活和层数后,损失仍然卡住并且准确率低于 0.01

转载 作者:行者123 更新时间:2023-11-30 09:26:42 25 4
gpt4 key购买 nike

如标题所述,我不知道如何构建狗物种识别的最佳模型。

我尝试了各种方法,例如删除层、更改密集值、添加学习率、添加衰减率,甚至更改优化器,但无济于事

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,Dropout,Activation, Flatten, Conv2D, MaxPooling2D

#print(X)
# print(y)
model = Sequential()

# METHOD TWO(Works but not accurate, built by self)
model.add(Conv2D(128,(3,3),input_shape=X.shape[1:]))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Activation("relu"))

model.add(Conv2D(128,(3,3)))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Activation("relu"))

model.add(Flatten())
model.add(Activation("relu"))
model.add(Dense(2048))
model.add(Dropout(0.5))

model.add(Activation("relu"))
model.add(Dense(2048))
model.add(Dropout(0.5))

model.add(Activation("relu"))
model.add(Dense(2048))
model.add(Dropout(0.5))

model.add(Activation("softmax"))
model.add(Dense(120))

opt = tf.keras.optimizers.Adam()
model.compile(optimizer = opt,
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])

# from tfkeras.utils import to_categorical
# y_binary = tf.keras.utils.to_categorical(y)
# y_binary = to_categorical(y)

model.fit(X, y,epochs=2)

Epoch 1/2
20580/20580 [==============================] - 311s 15ms/sample - loss: 4.8735 - acc: 0.0084

Epoch 2/2
12448/20580 [=================>............] - ETA: 2:02 - loss: 4.7875 - acc: 0.0071

最佳答案

这里有一些错误:

  • 在对它们进行最大池化之前,首先激活您的 conv2d 层! ->
model.add(Conv2D(128, (3, 3), input_shape=X.shape[1:], activation='relu', padding='same'))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Conv2D(128,(3,3),input_shape=X.shape[1:]))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
  • 其次,您需要在最后一层之后而不是之前进行 softmax 激活! Softmax 用于计算最后一层每个神经元的概率,您需要这样做:
model.add(Dense(120))
model.add(Activation("softmax"))
  • 第三,正如 Matias 所说,2 个 epoch 根本不够,请尝试增加这个数字!
  • 第四,对于这种分类来说,2个卷积层根本不够,还需要增加这个,并改变过滤器的数量,以便捕获图像上的不同特征
    常见的卷积 block 架构如下所示:
model.add(Conv2D(64, (3, 3) , padding='SAME'))
model.add(Activation("relu"))
model.add(Conv2D(64, (3, 3) , padding='SAME'))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

您可以根据需要操作此类 block ,尝试使用不同数量的过滤器的多个 block 等

  • 第五,对于您的问题,您的全连接网络中的神经元太多,请尝试更简单的架构,这样可以在更短的时间内提供更好的结果:
model.add(Flatten())
model.add(Dense(256))
model.add(Activation('relu')
model.add(Dense(128)(x)
model.add(Activation('relu'))
model.add(Dense(120))
model.add(Activation('softmax'))

在评论中告诉我此更改给您带来的结果!

关于python - 即使调整了密度、激活和层数后,损失仍然卡住并且准确率低于 0.01,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56596708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com