У меня есть CNN для обнаружения болезни Альцгеймера по данным МРТ. МРТ представляет собой 3D-сканирование 1,5 Тл, и череп хорошо виден (готовый набор данных из 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))
https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FslInstallation
- person Pygirl   schedule 02.01.2020