বৈধতা হ্রাস এবং নির্ভুলতা স্থির থাকে remain


12

আমি এই কাগজটি মেডিকেল ইমেজের সেটগুলিতে প্রয়োগ করার চেষ্টা করছি । আমি কেরাসে এটি করছি। নেটওয়ার্কটিতে মূলত 4 টি রূপান্তর এবং সর্বাধিক-পুল স্তর থাকে যার পরে একটি সম্পূর্ণ সংযুক্ত স্তর এবং নরম সর্বাধিক শ্রেণিবদ্ধ হয়।

আমি যতদূর জানি, আমি কাগজে উল্লিখিত আর্কিটেকচারটি অনুসরণ করেছি। যাইহোক, বৈধতা হ্রাস এবং নির্ভুলতা কেবল জুড়েই ফ্ল্যাট থাকে। যথার্থতা 57.5% এ স্থির বলে মনে হচ্ছে।

আমি যেখানে ভুল হতে চলেছি সে সম্পর্কে যে কোনও সহায়তা প্রশংসিত হবে।

আমার কোড:

from keras.models import Sequential
from keras.layers import Activation, Dropout, Dense, Flatten  
from keras.layers import Convolution2D, MaxPooling2D
from keras.optimizers import SGD
from keras.utils import np_utils
from PIL import Image
import numpy as np
from sklearn.utils import shuffle
from sklearn.cross_validation import train_test_split
import theano
import os
import glob as glob
import cv2
from matplotlib import pyplot as plt

nb_classes = 2
img_rows, img_cols = 100,100
img_channels = 3


#################### DATA DIRECTORY SETTING######################

data = '/home/raghuram/Desktop/data'
os.chdir(data)
file_list = os.listdir(data)
##################################################################

## Test lines
#I = cv2.imread(file_list[1000])
#print np.shape(I)
####
non_responder_file_list = glob.glob('0_*FLAIR_*.png')
responder_file_list = glob.glob('1_*FLAIR_*.png')
print len(non_responder_file_list),len(responder_file_list)

labels = np.ones((len(file_list)),dtype = int)
labels[0:len(non_responder_file_list)] = 0
immatrix = np.array([np.array(cv2.imread(data+'/'+image)).flatten() for image in file_list])
#img = immatrix[1000].reshape(100,100,3)
#plt.imshow(img,cmap = 'gray')


data,Label = shuffle(immatrix,labels, random_state=2)
train_data = [data,Label]
X,y = (train_data[0],train_data[1])
# Also need to look at how to preserve spatial extent in the conv network
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=4)
X_train = X_train.reshape(X_train.shape[0], 3, img_rows, img_cols)
X_test = X_test.reshape(X_test.shape[0], 3, img_rows, img_cols)
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')

X_train /= 255
X_test /= 255

Y_train = np_utils.to_categorical(y_train, nb_classes)
Y_test = np_utils.to_categorical(y_test, nb_classes)

model = Sequential()

## First conv layer and its activation followed by the max-pool layer#
model.add(Convolution2D(16,5,5, border_mode = 'valid', subsample = (1,1), init = 'glorot_normal',input_shape = (3,100,100))) # Glorot normal is similar to Xavier initialization
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size = (2,2),strides = None))
# Output is 48x48

print 'First layer setup'
###########################Second conv layer#################################
model.add(Convolution2D(32,3,3,border_mode = 'same', subsample = (1,1),init = 'glorot_normal'))
model.add(Activation('relu'))
model.add(Dropout(0.6))
model.add(MaxPooling2D(pool_size = (2,2),strides = None))
#############################################################################

print ' Second layer setup'
# Output is 2x24

##########################Third conv layer###################################
model.add(Convolution2D(64,3,3, border_mode = 'same', subsample = (1,1), init = 'glorot_normal'))
model.add(Activation('relu'))
model.add(Dropout(0.6))
model.add(MaxPooling2D(pool_size = (2,2),strides = None))
#############################################################################
# Output is 12x12

print ' Third layer setup'
###############################Fourth conv layer#############################
model.add(Convolution2D(128,3,3, border_mode = 'same', subsample = (1,1), init = 'glorot_normal'))
model.add(Activation('relu'))
model.add(Dropout(0.6))
model.add(MaxPooling2D(pool_size = (2,2),strides = None))
############################################################################# 

print 'Fourth layer setup'

# Output is 6x6x128
# Create the FC layer of size 128x6x6#
model.add(Flatten()) 
model.add(Dense(2,init = 'glorot_normal',input_dim = 128*6*6))
model.add(Dropout(0.6))
model.add(Activation('softmax'))

print 'Setting up fully connected layer'
print 'Now compiling the network'
sgd = SGD(lr=0.01, decay=1e-4, momentum=0.6, nesterov=True)
model.compile(loss = 'mse',optimizer = 'sgd', metrics=['accuracy'])

# Fit the network to the data#
print 'Network setup successfully. Now fitting the network to the data'
model. fit(X_train,Y_train,batch_size = 100, nb_epoch = 20, validation_split = None,verbose = 1)
print 'Testing'
loss,accuracy = model.evaluate(X_test,Y_test,batch_size = 32,verbose = 1)
print "Test fraction correct (Accuracy) = {:.2f}".format(accuracy)

প্রশিক্ষণের ক্ষতি কি কমছে?
জান ভ্যান ডের Vegt

না, প্রশিক্ষণের ক্ষতিও সর্বদা স্থির থাকে।
রঘুরাম

আপনি আপনার ফিট কলটিতে কোনও বৈধতা ডেটা বা যাচাইকরণ_স্প্লিট সেট করেন নি, এটি কীটির উপর বৈধতা দেবে? নাকি পরীক্ষা বলতে চাচ্ছেন?
জান ভ্যান ডের Vegt

এটাই আশেপাশের পরীক্ষা-নিরীক্ষার পরে। আমি কোনওটিতে সেট করার আগে যাচাইকরণ_স্প্লিট = 0.2 সেট করেছিলাম এবং এটির সাথেও প্রায় পরীক্ষামূলক।
রঘুরাম

2
প্রশিক্ষণের ক্ষতি কম হতে পারে কিনা তা দেখার জন্য আপনি অনেক বারের জন্য একটি ব্যাচ ফিট করতে পারেন?
জান ভ্যান ডের Vegt

উত্তর:


4

মনে হচ্ছে আপনি এমএসইটিকে ক্ষতির ফাংশন হিসাবে ব্যবহার করেছেন, কাগজের এক ঝলক দেখে মনে হয় তারা এনএলএল (ক্রস এনট্রপি) ব্যবহার করে, এমএসই অন্যান্য সমস্যার মধ্যে ডেটা ভারসাম্যের ক্ষেত্রে সংবেদনশীল বলে বিবেচিত হয় এবং এটি আপনার সমস্যার কারণ হতে পারে অভিজ্ঞতা, আমি আপনার ক্ষেত্রে শ্রেণিবদ্ধ_ক্রসেন্ট্রোপি ক্ষতি ব্যবহার করে প্রশিক্ষণের চেষ্টা করব, তদ্ব্যতীত ০.০১ এর শিক্ষার হারটি অনেক বড় বলে মনে হচ্ছে আমি এটির সাথে খেলতে চেষ্টা করব এবং ০.০০০ বা এমনকি ০.০০০০১ চেষ্টা করব


2

যদিও আমি এখানে কিছুটা দেরি করেছি, আমি আমার দুটি সেন্ট রাখতে চাই কারণ এটি সম্প্রতি একটি অনুরূপ সমস্যা সমাধানে আমাকে সহায়তা করেছিল। আমার উদ্ধারকাজে যা এসেছিল তা বৈশিষ্ট্যগুলি (0,1) রেঞ্জের মধ্যে শ্রেণীবদ্ধ ক্রস-এন্ট্রপি ক্ষতি ছাড়াও স্কেল করছিল। তবুও, এটি বলার অপেক্ষা রাখে না যে বৈশিষ্ট্যগুলি স্কেলিং কেবল তখনই সহায়তা করে যদি বৈশিষ্ট্যগুলি বিভিন্ন মেট্রিকের অন্তর্গত হয় এবং একে অপরের সাথে তুলনামূলকভাবে আরও বেশি তারতম্য অর্জন করে (ম্যাগনিটিউডের ক্রমে) যেমনটি আমার ক্ষেত্রে ছিল। এছাড়াও, ক্ষয়টি যদি কেউ ব্যবহার করে তবে স্কেলিংটি সত্যই কার্যকর হতে পারে hinge, কারণ সর্বাধিক-মার্জিন শ্রেণিবদ্ধীরা সাধারণত বৈশিষ্ট্যের মানগুলির মধ্যে দূরত্বগুলির প্রতি সংবেদনশীল। আশা করি এটি কিছু ভবিষ্যতের দর্শকদের সহায়তা করবে!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.