Python 如何修改图层/模型以提高模型的准确性?
如何修改图层/模型以提高模型的准确性?我应该使用不同的激活或丢失功能吗?更多层次?你有什么建议 我的模型包括816张图片,分为3个类别用于培训,232张图片,分为3个类别用于验证Python 如何修改图层/模型以提高模型的准确性?,python,tensorflow,keras,deep-learning,neural-network,Python,Tensorflow,Keras,Deep Learning,Neural Network,如何修改图层/模型以提高模型的准确性?我应该使用不同的激活或丢失功能吗?更多层次?你有什么建议 我的模型包括816张图片,分为3个类别用于培训,232张图片,分为3个类别用于验证 modelseq = Sequential([ layers.experimental.preprocessing.Rescaling(1./255, input_shape=(224, 224, 3)), layers.Conv2D(16, (3,3), padding='same', activation=
modelseq = Sequential([
layers.experimental.preprocessing.Rescaling(1./255, input_shape=(224, 224, 3)),
layers.Conv2D(16, (3,3), padding='same', activation='relu'),
layers.Conv2D(16, (3,3), padding='same', activation='relu'),
layers.MaxPooling2D(pool_size=(2,2)),
layers.Conv2D(32, (3,3), padding='same', activation='relu'),
layers.Conv2D(32, (3,3), padding='same', activation='relu'),
layers.MaxPooling2D(pool_size=(2,2)),
layers.Conv2D(64, (3,3), padding='same', activation='relu'),
layers.Conv2D(64, (3,3), padding='same', activation='relu'),
layers.MaxPooling2D(pool_size=(2,2)),
# layers.Dropout(0.1),
layers.Conv2D(128, (3,3), padding='same', activation='relu'),
layers.MaxPooling2D(2,2),
layers.Conv2D(256, (3,3), padding='same', activation='relu'),
layers.Conv2D(256, (3,3), padding='same', activation='relu'),
layers.Conv2D(256, (3,3), padding='same', activation='relu'),
layers.MaxPooling2D(2,2),
# layers.Dropout(0.1),
layers.Conv2D(512, (3,3), padding='same', activation='relu'),
layers.Conv2D(512, (3,3), padding='same', activation='relu'),
layers.Conv2D(512, (3,3), padding='same', activation='relu'),
layers.MaxPooling2D(2,2),
layers.Conv2D(512, (3,3), padding='same', activation='relu'),
layers.Conv2D(512, (3,3), padding='same', activation='relu'),
layers.Conv2D(512, (3,3), padding='same', activation='relu'),
layers.MaxPooling2D(2,2),
layers.Flatten(),
layers.Dense(len(folder),activation='relu'),
layers.Dense(3,activation='softmax'),
# layers.Dropout(0.6),
# layers.Dense(3,activation='sigmoid')
])
modelseq.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
modelseq.summary()
来自拟合生成器的结果
51/51 [==============================] - 19s 360ms/step - loss: 1.1383 - accuracy: 0.4428 - val_loss: 1.0920 - val_accuracy: 0.3879
Epoch 2/16
51/51 [==============================] - 18s 351ms/step - loss: 1.1010 - accuracy: 0.2365 - val_loss: 1.0899 - val_accuracy: 0.3879
Epoch 3/16
51/51 [==============================] - 18s 352ms/step - loss: 1.1070 - accuracy: 0.2813 - val_loss: 1.0870 - val_accuracy: 0.3879
Epoch 4/16
51/51 [==============================] - 18s 349ms/step - loss: 1.0733 - accuracy: 0.4730 - val_loss: 1.0883 - val_accuracy: 0.3879
Epoch 5/16
51/51 [==============================] - 18s 351ms/step - loss: 1.0814 - accuracy: 0.4281 - val_loss: 1.0873 - val_accuracy: 0.3879
Epoch 6/16
51/51 [==============================] - 18s 351ms/step - loss: 1.0890 - accuracy: 0.3486 - val_loss: 1.0871 - val_accuracy: 0.3879
Epoch 7/16
51/51 [==============================] - 18s 351ms/step - loss: 1.0813 - accuracy: 0.4949 - val_loss: 1.0855 - val_accuracy: 0.3879
Epoch 8/16
51/51 [==============================] - 18s 349ms/step - loss: 1.0888 - accuracy: 0.4450 - val_loss: 1.0844 - val_accuracy: 0.3879
Epoch 9/16
51/51 [==============================] - 18s 351ms/step - loss: 1.0641 - accuracy: 0.5454 - val_loss: 1.0837 - val_accuracy: 0.3879
Epoch 10/16
51/51 [==============================] - 18s 349ms/step - loss: 1.0657 - accuracy: 0.4772 - val_loss: 1.0834 - val_accuracy: 0.3879
Epoch 11/16
51/51 [==============================] - 18s 353ms/step - loss: 1.0911 - accuracy: 0.3621 - val_loss: 1.0831 - val_accuracy: 0.3879
Epoch 12/16
51/51 [==============================] - 18s 351ms/step - loss: 1.0797 - accuracy: 0.3686 - val_loss: 1.0826 - val_accuracy: 0.3879
Epoch 13/16
51/51 [==============================] - 18s 349ms/step - loss: 1.0747 - accuracy: 0.4091 - val_loss: 1.0822 - val_accuracy: 0.3879
Epoch 14/16
51/51 [==============================] - 18s 350ms/step - loss: 1.0781 - accuracy: 0.3401 - val_loss: 1.0820 - val_accuracy: 0.3879
Epoch 15/16
51/51 [==============================] - 18s 348ms/step - loss: 1.0873 - accuracy: 0.3769 - val_loss: 1.0818 - val_accuracy: 0.3879
Epoch 16/16
51/51 [==============================] - 18s 350ms/step - loss: 1.0881 - accuracy: 0.3628 - val_loss: 1.0815 - val_accuracy: 0.3879
我建议每层使用较少的层和神经元(与问题的规模相比,您的网络是一个巨大的网络)。此外,在输入端使用大层可能比在输出端使用大层更好。但是,请记住,此线程是关于编写代码时的技术问题,而您的问题与模型实现有关。当然,您可以做许多不同的事情。还有一些变量/超参数没有提供学习率和验证分割。我本想说的是纪元数和批量大小,但我可以从培训打印输出中推断出来。我也可以推断验证分割,但我不打算计算
- 不同的学习率
- 不同的激活函数(elu或selu可能是个好主意,消失梯度不太明显)
- 更多时代
- 稀疏化
- 正规化
- 不同的优化器
- 学习速率调度器
- 学习速率调度器+优化器
- 修剪(与稀疏化不完全相同)
- 卷积滤波器的结构化初始化(线、角、圆、正方形等)
- 跨步与合流(我不知道它们在准确性/性能方面的比较)