【发布时间】:2020-04-21 01:57:14
【问题描述】:
我有一个用于在 MRI 数据上检测阿尔茨海默病的 CNN。 MRI 是 3D 1.5T 扫描,头骨非常明显(来自 ADNI1 第 3 年的预制数据集)。我一直在尝试调整头骨剥离但没有成功,因此决定在不剥离头骨的情况下运行我的模型。
结果让我很困惑。从所附图像中可以看出,该模型没有正常的学习曲线。我尝试更改模型的参数,添加更多层和退出正则化,但我要么得到这个随机学习曲线,要么得到一个恒定的(精度和损失在整个时期都不会改变),而且精度非常低并且仍然非常低(它是二进制分类)。
,
我想知道输入数据对模型的学习过程有多大影响。我了解到神经网络并不总是需要预处理,因为网络会减去特征本身,但这些结果让我质疑。所以我的问题是:无关数据(在我的例子中是头骨)对神经网络的学习过程有多大影响?
编辑:添加了我的模型
#hot-one labeling
Y = np.load('y_array.npy')
X = np.load('images_array.npy')
encoder = LabelEncoder()
encoder.fit(Y)
encoded_Y = encoder.transform(Y)
dummy_y = np_utils.to_categorical(encoded_Y)
#train-test split
X_train, X_test, y_train, y_test = train_test_split(X, dummy_y, test_size=0.2, random_state=1)
test_size=0.2, random_state=1)
print(X_train.shape , X_test.shape, y_train.shape, y_test.shape)
[out:] (718, 192, 192, 160) (180, 192, 192, 160) (718, 2) (180, 2)
batch_size = 64
epochs = 40
num_classes =2
AD_model = Sequential()
AD_model.add(Conv2D(64, kernel_size=(3, 3),activation='linear',input_shape=(192,192,160),padding='same'))
AD_model.add(LeakyReLU(alpha=0.1))
AD_model.add(MaxPooling2D((2, 2),padding='same'))
AD_model.add(Conv2D(128, (3, 3), activation='linear',padding='same'))
AD_model.add(LeakyReLU(alpha=0.1))
AD_model.add(MaxPooling2D(pool_size=(2, 2),padding='same'))
AD_model.add(Conv2D(256, (3, 3), activation='linear',padding='same'))
AD_model.add(LeakyReLU(alpha=0.1))
AD_model.add(MaxPooling2D(pool_size=(2, 2),padding='same'))
AD_model.add(Flatten())
AD_model.add(Dense(256, activation='linear'))
AD_model.add(LeakyReLU(alpha=0.1))
AD_model.add(Dense(num_classes, activation='sigmoid'))
AD_model.compile(loss='binary_crossentropy', optimizer='adam',metrics=['accuracy'])
AD_model.summary()
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 192, 192, 64) 92224
_________________________________________________________________
leaky_re_lu_1 (LeakyReLU) (None, 192, 192, 64) 0
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 96, 96, 64) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 96, 96, 128) 73856
_________________________________________________________________
leaky_re_lu_2 (LeakyReLU) (None, 96, 96, 128) 0
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 48, 48, 128) 0
_________________________________________________________________
conv2d_3 (Conv2D) (None, 48, 48, 256) 295168
_________________________________________________________________
leaky_re_lu_3 (LeakyReLU) (None, 48, 48, 256) 0
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 24, 24, 256) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 147456) 0
_________________________________________________________________
dense_1 (Dense) (None, 256) 37748992
_________________________________________________________________
leaky_re_lu_4 (LeakyReLU) (None, 256) 0
_________________________________________________________________
dense_2 (Dense) (None, 2) 514
=================================================================
Total params: 38,210,754
Trainable params: 38,210,754
Non-trainable params: 0
history = AD_model.fit(
X_train,
y_train,
batch_size=batch_size,
epochs=epochs,
verbose=1,
validation_data=(X_test, y_test))
【问题讨论】:
-
曲线非常混乱。你想分享你的模型吗?
-
总是没有不相关的数据......
-
不相关的数据可能会影响模型。但不可能说多少。每个数据和每个模型都是不同的。现在,你真的应该为你的问题带来足够的信息。无法回答任何问题。
-
剥颅部分可以使用fsl
https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FslInstallation -
@DanielMöller 我添加了我使用的模型。由于隐私原因,我无法举例说明我正在使用的其中一台 MRI 的外观。但类似图像的示例是第二张图像here (Sagittal 3D T1w FFE)
标签: python tensorflow keras neural-network neuroscience