2024-04-25 19:41:27 发布
网友
我正在学习使用我在Kaggle上找到的一个数据集用Keras写CNNs。你知道吗
我笔记本的链接是
https://www.kaggle.com/vj6978/brain-tumor-vimal?scriptVersionId=16814133
代码、数据集和ROC曲线在链接中可用。ROC曲线本身看起来好像模型只是在猜测,而不是在学习预测。你知道吗
测试的准确率似乎也在60%到70%左右达到峰值,这是非常低的。任何帮助都将不胜感激。你知道吗
谢谢 维末詹姆斯
我相信你最后的激活应该是乙状结肠而不是softmax。你知道吗
更新:
只需在Kaggle上分叉内核,并按以下方式进行修改即可获得更好的结果:
model = Sequential() model.add(Conv2D(128, (3,3), input_shape = data_set.shape[1:])) model.add(Activation("relu")) model.add(AveragePooling2D(pool_size = (2,2))) model.add(Conv2D(128, (3,3))) model.add(Activation("relu")) model.add(AveragePooling2D(pool_size = (2,2))) model.add(Flatten()) model.add(Dense(64)) model.add(Dense(1)) model.add(Activation("sigmoid")) # Last activation should be sigmoid for binary classification model.compile(optimizer = "adam", loss = "binary_crossentropy", metrics = ['accuracy'])
结果如下:
rain on 204 samples, validate on 23 samples Epoch 1/15 204/204 [==============================] - 2s 11ms/step - loss: 2.8873 - acc: 0.6373 - val_loss: 0.8000 - val_acc: 0.8261 Epoch 2/15 204/204 [==============================] - 1s 3ms/step - loss: 0.7292 - acc: 0.7206 - val_loss: 0.6363 - val_acc: 0.7391 Epoch 3/15 204/204 [==============================] - 1s 3ms/step - loss: 0.4731 - acc: 0.8088 - val_loss: 0.5417 - val_acc: 0.8261 Epoch 4/15 204/204 [==============================] - 1s 3ms/step - loss: 0.3605 - acc: 0.8775 - val_loss: 0.6820 - val_acc: 0.8696 Epoch 5/15 204/204 [==============================] - 1s 3ms/step - loss: 0.2986 - acc: 0.8529 - val_loss: 0.8356 - val_acc: 0.8696 Epoch 6/15 204/204 [==============================] - 1s 3ms/step - loss: 0.2151 - acc: 0.9020 - val_loss: 0.7592 - val_acc: 0.8696 Epoch 7/15 204/204 [==============================] - 1s 3ms/step - loss: 0.1305 - acc: 0.9657 - val_loss: 1.2486 - val_acc: 0.8696 Epoch 8/15 204/204 [==============================] - 1s 3ms/step - loss: 0.0565 - acc: 0.9853 - val_loss: 1.2668 - val_acc: 0.8696 Epoch 9/15 204/204 [==============================] - 1s 3ms/step - loss: 0.0426 - acc: 0.9853 - val_loss: 1.4674 - val_acc: 0.8696 Epoch 10/15 204/204 [==============================] - 1s 3ms/step - loss: 0.0141 - acc: 1.0000 - val_loss: 1.7379 - val_acc: 0.8696 Epoch 11/15 204/204 [==============================] - 1s 3ms/step - loss: 0.0063 - acc: 1.0000 - val_loss: 1.7232 - val_acc: 0.8696 Epoch 12/15 204/204 [==============================] - 1s 3ms/step - loss: 0.0023 - acc: 1.0000 - val_loss: 1.8291 - val_acc: 0.8696 Epoch 13/15 204/204 [==============================] - 1s 3ms/step - loss: 0.0014 - acc: 1.0000 - val_loss: 1.9164 - val_acc: 0.8696 Epoch 14/15 204/204 [==============================] - 1s 3ms/step - loss: 8.6263e-04 - acc: 1.0000 - val_loss: 1.8946 - val_acc: 0.8696 Epoch 15/15 204/204 [==============================] - 1s 3ms/step - loss: 6.8785e-04 - acc: 1.0000 - val_loss: 1.9596 - val_acc: 0.8696 Test loss: 3.079359292984009 Test accuracy: 0.807692289352417
如果您对单个神经元使用softmax激活,由于softmax中使用的标准化,这将始终产生恒定的1.0输出,因此没有意义。对于二进制分类,您必须使用sigmoid激活和单个输出神经元。你知道吗
softmax
sigmoid
我相信你最后的激活应该是乙状结肠而不是softmax。你知道吗
更新:
只需在Kaggle上分叉内核,并按以下方式进行修改即可获得更好的结果:
结果如下:
如果您对单个神经元使用
softmax
激活,由于softmax中使用的标准化,这将始终产生恒定的1.0输出,因此没有意义。对于二进制分类,您必须使用sigmoid
激活和单个输出神经元。你知道吗相关问题 更多 >
编程相关推荐