সিআইএফএআর -10 60০% নির্ভুলতার উপরে উঠতে পারে না, টেনসরফ্লো ব্যাকএন্ড সহ কেরাস [বন্ধ]


11

সিআইএফএআর -10 ডেটাসেটে 15 যুগের পরে প্রশিক্ষণটি বৈধতা হ্রাস আর কমবে না বলে মনে হয়, প্রায় 1.4 (60% বৈধতা যথাযথতার সাথে) ic আমি প্রশিক্ষণ সেটটি পরিবর্তন করেছি, এটিকে 255 দ্বারা বিভক্ত করেছি এবং ফ্লোট 32 হিসাবে আমদানি করেছি। Conv2D স্তরগুলিতে এবং ড্রপআউট ছাড়াও আমি অনেকগুলি আর্কিটেকচার চেষ্টা করেছি এবং কিছুই কাজ করছে বলে মনে হয় না। একই আর্কিটেকচার এমএনআইএসটি পরীক্ষার সেটগুলিতে 99.7% যথার্থতা অর্জন করে। নীচে আর্কিটেকচার দেখুন:

(দ্রষ্টব্য: আমি অতিরিক্ত চাপ প্রতিরোধের জন্য অ্যাডাম অপটিমাইজারের বর্ধনশীল বৃদ্ধি এবং ক্রমবর্ধমান / শিখার হারকে আরও বাড়িয়ে দেওয়ার চেষ্টা করেছি, এটি সবই অতিরিক্ত মানানসই প্রতিরোধ করে তবে প্রশিক্ষণ এবং পরীক্ষার উভয়ই এখন একইরকম কম নির্ভুলতার সাথে প্রায় 60% রয়েছে))।

with tf.device('/gpu:0'):
    tf.placeholder(tf.float32, shape=(None, 20, 64))
    #placeholder initialized (pick /cpu:0 or /gpu:0)
    seed = 6
    np.random.seed(seed)
    modelnn = Sequential()
    neurons = x_train_reduced.shape[1:]

    modelnn.add(Convolution2D(32, 3, 3, input_shape=neurons, activation='relu', border_mode='same'))
    modelnn.add(Convolution2D(32, 3, 3, activation='relu', border_mode='same'))
    modelnn.add(MaxPooling2D(pool_size=(2, 2)))
    modelnn.add(Dropout(0.2))
    modelnn.add(Convolution2D(64, 3, 3, activation='relu', border_mode='same'))
    modelnn.add(Convolution2D(64, 3, 3, activation='relu', border_mode='same'))
    modelnn.add(MaxPooling2D(pool_size=(2, 2)))
    modelnn.add(Dropout(0.2))
    modelnn.add(Convolution2D(128, 3, 3, activation='relu', border_mode='same'))
    modelnn.add(Convolution2D(128, 3, 3, activation='relu', border_mode='same'))
    modelnn.add(MaxPooling2D(pool_size=(2, 2)))
    modelnn.add(Dropout(0.2))
    #modelnn.add(Convolution2D(256, 3, 3, activation='relu', border_mode='same'))
    #modelnn.add(Convolution2D(256, 3, 3, activation='relu', border_mode='same'))
    #modelnn.add(MaxPooling2D(pool_size=(2, 2)))
    modelnn.add(Flatten())
    #modelnn.add(Dropout(0.5))
    modelnn.add(Dense(1024, activation='relu', W_constraint=maxnorm(3)))
    modelnn.add(Dropout(0.5))
    modelnn.add(Dense(512, activation='relu', W_constraint=maxnorm(3)))
    modelnn.add(Dropout(0.5))
    modelnn.add(Dense(10, activation='softmax'))
    modelnn.compile(loss='categorical_crossentropy', optimizer=optimizer_input, metrics=['accuracy'])
    y_train = to_categorical(y_train)
    modelnn.fit(x_train_reduced, y_train, nb_epoch=nb_epoch_count, shuffle=True, batch_size=bsize,
                           validation_split=0.1)

ফলাফল:

    44100/44100 [==============================] - 22s - loss: 2.1453 - acc: 0.2010 - val_loss: 1.9812 - val_acc: 0.2959
    Epoch 2/50
    44100/44100 [==============================] - 24s - loss: 1.9486 - acc: 0.3089 - val_loss: 1.8685 - val_acc: 0.3567
    Epoch 3/50
    44100/44100 [==============================] - 18s - loss: 1.8599 - acc: 0.3575 - val_loss: 1.7822 - val_acc: 0.3982
    Epoch 4/50
    44100/44100 [==============================] - 18s - loss: 1.7925 - acc: 0.3933 - val_loss: 1.7272 - val_acc: 0.4229
    Epoch 5/50
    44100/44100 [==============================] - 18s - loss: 1.7425 - acc: 0.4195 - val_loss: 1.6806 - val_acc: 0.4459
    Epoch 6/50
    44100/44100 [==============================] - 18s - loss: 1.6998 - acc: 0.4440 - val_loss: 1.6436 - val_acc: 0.4682
    Epoch 7/50
    44100/44100 [==============================] - 18s - loss: 1.6636 - acc: 0.4603 - val_loss: 1.6156 - val_acc: 0.4837
    Epoch 8/50
    44100/44100 [==============================] - 18s - loss: 1.6333 - acc: 0.4781 - val_loss: 1.6351 - val_acc: 0.4776
    Epoch 9/50
    44100/44100 [==============================] - 18s - loss: 1.6086 - acc: 0.4898 - val_loss: 1.5732 - val_acc: 0.5063
    Epoch 10/50
    44100/44100 [==============================] - 18s - loss: 1.5776 - acc: 0.5065 - val_loss: 1.5411 - val_acc: 0.5227
    Epoch 11/50
    44100/44100 [==============================] - 18s - loss: 1.5585 - acc: 0.5145 - val_loss: 1.5485 - val_acc: 0.5212
    Epoch 12/50
    44100/44100 [==============================] - 18s - loss: 1.5321 - acc: 0.5288 - val_loss: 1.5354 - val_acc: 0.5316
    Epoch 13/50
    44100/44100 [==============================] - 18s - loss: 1.5082 - acc: 0.5402 - val_loss: 1.5022 - val_acc: 0.5427
    Epoch 14/50
    44100/44100 [==============================] - 18s - loss: 1.4945 - acc: 0.5438 - val_loss: 1.4916 - val_acc: 0.5490
    Epoch 15/50
    44100/44100 [==============================] - 192s - loss: 1.4762 - acc: 0.5535 - val_loss: 1.5159 - val_acc: 0.5394
    Epoch 16/50
    44100/44100 [==============================] - 18s - loss: 1.4577 - acc: 0.5620 - val_loss: 1.5389 - val_acc: 0.5257
    Epoch 17/50
    44100/44100 [==============================] - 18s - loss: 1.4425 - acc: 0.5671 - val_loss: 1.4590 - val_acc: 0.5667
    Epoch 18/50
    44100/44100 [==============================] - 18s - loss: 1.4258 - acc: 0.5766 - val_loss: 1.4552 - val_acc: 0.5763
    Epoch 19/50
    44100/44100 [==============================] - 18s - loss: 1.4113 - acc: 0.5805 - val_loss: 1.4439 - val_acc: 0.5767
    Epoch 20/50
    44100/44100 [==============================] - 18s - loss: 1.3971 - acc: 0.5879 - val_loss: 1.4473 - val_acc: 0.5769
    Epoch 21/50
    44100/44100 [==============================] - 18s - loss: 1.3850 - acc: 0.5919 - val_loss: 1.4251 - val_acc: 0.5871
    Epoch 22/50
    44100/44100 [==============================] - 18s - loss: 1.3668 - acc: 0.6006 - val_loss: 1.4203 - val_acc: 0.5910
    Epoch 23/50
    44100/44100 [==============================] - 18s - loss: 1.3549 - acc: 0.6051 - val_loss: 1.4207 - val_acc: 0.5939
    Epoch 24/50
    44100/44100 [==============================] - 18s - loss: 1.3373 - acc: 0.6111 - val_loss: 1.4516 - val_acc: 0.5784
    Epoch 25/50
    44100/44100 [==============================] - 18s - loss: 1.3285 - acc: 0.6149 - val_loss: 1.4146 - val_acc: 0.5922
    Epoch 26/50
    44100/44100 [==============================] - 18s - loss: 1.3134 - acc: 0.6205 - val_loss: 1.4090 - val_acc: 0.6024
    Epoch 27/50
    44100/44100 [==============================] - 18s - loss: 1.3043 - acc: 0.6239 - val_loss: 1.4307 - val_acc: 0.5959
    Epoch 28/50
    44100/44100 [==============================] - 18s - loss: 1.2862 - acc: 0.6297 - val_loss: 1.4241 - val_acc: 0.5978
    Epoch 29/50
    44100/44100 [==============================] - 18s - loss: 1.2706 - acc: 0.6340 - val_loss: 1.4046 - val_acc: 0.6067
    Epoch 30/50
    44100/44100 [==============================] - 18s - loss: 1.2634 - acc: 0.6405 - val_loss: 1.4120 - val_acc: 0.6037
    Epoch 31/50
    44100/44100 [==============================] - 18s - loss: 1.2473 - acc: 0.6446 - val_loss: 1.4067 - val_acc: 0.6045
    Epoch 32/50
    44100/44100 [==============================] - 18s - loss: 1.2411 - acc: 0.6471 - val_loss: 1.4083 - val_acc: 0.6098
    Epoch 33/50
    44100/44100 [==============================] - 18s - loss: 1.2241 - acc: 0.6498 - val_loss: 1.4091 - val_acc: 0.6076
    Epoch 34/50
    44100/44100 [==============================] - 18s - loss: 1.2121 - acc: 0.6541 - val_loss: 1.4209 - val_acc: 0.6127
    Epoch 35/50
    44100/44100 [==============================] - 18s - loss: 1.1995 - acc: 0.6582 - val_loss: 1.4230 - val_acc: 0.6131
    Epoch 36/50
    44100/44100 [==============================] - 18s - loss: 1.1884 - acc: 0.6622 - val_loss: 1.4024 - val_acc: 0.6124
    Epoch 37/50
    44100/44100 [==============================] - 18s - loss: 1.1778 - acc: 0.6657 - val_loss: 1.4328 - val_acc: 0.6080
    Epoch 38/50
    44100/44100 [==============================] - 18s - loss: 1.1612 - acc: 0.6683 - val_loss: 1.4246 - val_acc: 0.6159
    Epoch 39/50
    44100/44100 [==============================] - 18s - loss: 1.1466 - acc: 0.6735 - val_loss: 1.4282 - val_acc: 0.6122
    Epoch 40/50
    44100/44100 [==============================] - 18s - loss: 1.1325 - acc: 0.6783 - val_loss: 1.4311 - val_acc: 0.6157
    Epoch 41/50
    44100/44100 [==============================] - 18s - loss: 1.1213 - acc: 0.6806 - val_loss: 1.4647 - val_acc: 0.6047
    Epoch 42/50
    44100/44100 [==============================] - 18s - loss: 1.1064 - acc: 0.6842 - val_loss: 1.4631 - val_acc: 0.6047
    Epoch 43/50
    44100/44100 [==============================] - 18s - loss: 1.0967 - acc: 0.6870 - val_loss: 1.4535 - val_acc: 0.6106
    Epoch 44/50
    44100/44100 [==============================] - 18s - loss: 1.0822 - acc: 0.6893 - val_loss: 1.4532 - val_acc: 0.6149
    Epoch 45/50
    44100/44100 [==============================] - 18s - loss: 1.0659 - acc: 0.6941 - val_loss: 1.4691 - val_acc: 0.6108
    Epoch 46/50
    44100/44100 [==============================] - 18s - loss: 1.0610 - acc: 0.6956 - val_loss: 1.4751 - val_acc: 0.6106
    Epoch 47/50
    44100/44100 [==============================] - 18s - loss: 1.0397 - acc: 0.6981 - val_loss: 1.4857 - val_acc: 0.6041
    Epoch 48/50
    44100/44100 [==============================] - 18s - loss: 1.0208 - acc: 0.7039 - val_loss: 1.4901 - val_acc: 0.6106
    Epoch 49/50
    44100/44100 [==============================] - 18s - loss: 1.0187 - acc: 0.7036 - val_loss: 1.4994 - val_acc: 0.6106
    Epoch 50/50
    44100/44100 [==============================] - 18s - loss: 1.0024 - acc: 0.7070 - val_loss: 1.5078 - val_acc: 0.6039
    Time: 1109.7512991428375
    Neural Network now trained from dimensions (49000, 3, 32, 32)

আপডেট: ম্যাক্সনর্ম এবং এর বাইরেও ব্যাচনারমালাইজেশন সহ আরও পরীক্ষা -

চিত্র

নতুন আর্কিটেকচার:

    modelnn.add(Convolution2D(32, 3, 3, input_shape=neurons, activation='relu', border_mode='same'))
    modelnn.add(Convolution2D(32, 3, 3, activation='relu', border_mode='same'))
    modelnn.add(MaxPooling2D(pool_size=(2, 2)))
    modelnn.add(BatchNormalization())
    modelnn.add(Dropout(0.2))
    modelnn.add(Convolution2D(64, 3, 3, activation='relu', border_mode='same'))
    modelnn.add(Convolution2D(64, 3, 3, activation='relu', border_mode='same'))
    modelnn.add(MaxPooling2D(pool_size=(2, 2)))
    modelnn.add(BatchNormalization())
    modelnn.add(Dropout(0.2))
    modelnn.add(Convolution2D(128, 3, 3, activation='relu', border_mode='same'))
    modelnn.add(Convolution2D(128, 3, 3, activation='relu', border_mode='same'))
    modelnn.add(BatchNormalization())
    modelnn.add(MaxPooling2D(pool_size=(2, 2)))
    modelnn.add(Dropout(0.2))
    # modelnn.add(Convolution2D(256, 3, 3, activation='relu', border_mode='same'))
    # modelnn.add(Convolution2D(256, 3, 3, activation='relu', border_mode='same'))
    # modelnn.add(MaxPooling2D(pool_size=(2, 2)))
    modelnn.add(Flatten())
    modelnn.add(Dense(1024, activation='relu', W_constraint=maxnorm(3)))
    modelnn.add(BatchNormalization())
    modelnn.add(Dropout(0.5))
    modelnn.add(Dense(512, activation='relu', W_constraint=maxnorm(3)))
    modelnn.add(BatchNormalization())
    modelnn.add(Dropout(0.5))
    modelnn.add(Dense(10, activation='softmax'))

উত্তর:


8

মনে রাখবেন যে সিএনএফএআর -10 এর তুলনায় এমএনআইএসটি একটি খুব সহজ সমস্যা সেট, এবং আপনি খুব অল্প অসুবিধায় সম্পূর্ণ-সংযুক্ত (অবিবর্তনকারী) এন নেট থেকে 98% পেতে পারেন। খুব সহজ সিএনএন মাত্র এক বা দুটি সমঝোতার স্তর সহ একই স্তরের নির্ভুলতার কাছে যেতে পারে।

আমি আপনার এন নেট আর্কিটেকচার সম্পর্কে নিশ্চিত নই, তবে আমি আপনাকে সিআইএফএআর -10 এ নিম্নলিখিত আর্কিটেকচারের সাথে 78% পরীক্ষার নির্ভুলতা পেতে পারি (যা তুলনামূলক সহজতর এবং ওজন কম)। ভ্যানিলা ডিফল্ট এবং অ্যাডাম অপ্টিমাইজার ব্যবহার করে কোনও বিশেষ সূচনা বা হ্যান্ডহোল্ডিংয়ের প্রয়োজন হয়নি:

model = Sequential()
model.add(Conv2D(input_shape=trainX[0,:,:,:].shape, filters=96, kernel_size=(3,3)))
model.add(Activation('relu'))
model.add(Conv2D(filters=96, kernel_size=(3,3), strides=2))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Conv2D(filters=192, kernel_size=(3,3)))
model.add(Activation('relu'))
model.add(Conv2D(filters=192, kernel_size=(3,3), strides=2))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(BatchNormalization())
model.add(Dense(256))
model.add(Activation('relu'))
model.add(Dense(n_classes, activation="softmax"))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

এই আর্কিটেকচারটি বেশ সহজ, এবং আলতোভাবে https://arxiv.org/pdf/1412.6806.pdf ভিত্তিক ।

এই মডেলকে এভাবে প্রশিক্ষণ দিন:

n_epochs = 25
batch_size = 256
callbacks_list = None
H = model.fit(trainX, trainY, validation_data=(testX, testY), 
              epochs=n_epochs, batch_size=batch_size, callbacks=callbacks_list)
print('Done!!!')

নিম্নলিখিতটি দেয় যা আপনি দেখতে পাচ্ছেন যে 25 তম যুগের মধ্যে প্রায় 77% হয়ে যায় এবং সেখান থেকে আরও কম বা কম ফ্ল্যাশ হয়ে যায় (তবে কমপক্ষে পরীক্ষিত সংখ্যার চেয়ে কম পরিমাণে ওভারফিটিংয়ের কারণে এটিকে অবনতি হতে আটকাতে পর্যাপ্ত নিয়মিতকরণ রয়েছে) ।

50000 নমুনা বৈধকরণ উপর ট্রেন 10000 নমুনার উপর
পর্ব 1/50
50000/50000 [==============================] - 19s 390us / পদক্ষেপ - লোকসান: 1.6058 - acc: 0.4150 - ভাল_লস: 1.5285 - ভাল_এইচসি: 0.4669
যুগ
2/50 50000/50000 [===================== =======] - 19 দশকে 371us / পদক্ষেপ - ক্ষতি: 1.2563 - অভিহিত: 0.5477 - ভাল_লস: 1.1447 - ভাল_এইচসি: 0.5901
ইপোক 3/50
50000/50000 [============= ================ - 19 এর দশকের 373us / পদক্ষেপ - ক্ষতি: 1.0784 - acc: 0.6163 - ভাল_লস: 1.1577 - ভাল_এইচসি: 0.6002
...
মহাকাশ
25/50 50000/50000 [ ============================] 19s 374us / পদক্ষেপ - ক্ষতি: 0.3188 - acc: 0.8857 - ভাল_লস: 0.7493 - ভাল_একসি : 0.7680
...
পর্ব 50/50
50000/50000 [============================= - 19 এর দশকের 373us / পদক্ষেপ - ক্ষতি: 0.1928 - এসি: 0.9329 - ভাল_লস : 0.8718 - ভাল_এইচসি: 0.7751
সম্পন্ন !!!

এখানে একটি আরও সহজ এবং অনেক ছোট আর্কিটেকচার যা একই প্রশিক্ষণ পদ্ধতিতে (কোনও ব্যাচনরমালাইজেশন বা পুলিং স্তর নেই) দিয়ে 70% পর্যন্ত দ্রুত পেতে পারে:

# CNN architecture with Keras
model = Sequential()
model.add(Conv2D(input_shape=trainX[0,:,:,:].shape, filters=32, 
                 use_bias=True, kernel_size=(3,3)))
model.add(Activation('relu'))
model.add(Dropout(0.1))
model.add(Conv2D(filters=64, use_bias=False, kernel_size=(5,5), strides=2))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(128))
model.add(Activation('relu'))
model.add(Dropout(0.3))
model.add(Dense(n_classes, activation="softmax"))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=    ['accuracy'])

এটি লক্ষণীয় যে, সিআইএফএআর -10 (বর্তমানে 90-96% পরিসীমাতে) সর্বাধিক প্রকাশিত নির্ভুলতার জন্য প্রাপ্ত আর্কিটেকচারগুলি সাধারণত আরও জটিল এবং জিপিইউ হার্ডওয়্যারের প্রশিক্ষণে বেশ কয়েক ঘন্টা সময় নেয়। তবে আমি বেশ কয়েক মিনিটের মধ্যে প্রশিক্ষিত মোটামুটি সাধারণ স্থাপত্যগুলির সাথে 70-80% রেঞ্জে পৌঁছতে সক্ষম হয়েছি, এটিই সর্বাধিক প্রকাশিত ফলাফলের জন্য যাবার আগে আমি সুপারিশ করতাম যার জন্য সাধারণত আরও জটিল আর্কিটেকচার, দীর্ঘ প্রশিক্ষণের সময়সীমার প্রয়োজন হয়, কখনও কখনও বিশেষ হ্যান্ডহোল্ডিং / প্রশিক্ষণ ব্যবস্থা বা ডেটা বৃদ্ধি, এবং ট্রেনের ঘন্টা।

হালনাগাদ:

প্রশ্নের আপডেট হওয়া প্লটের ভিত্তিতে, সবচেয়ে সুস্পষ্ট সমস্যা যা প্রদর্শিত হয় তা হ'ল ফিট over এটি 15 তম যুগের পরে ট্রেন-পরীক্ষার ডেটাগুলির বিচ্যুতি দ্বারা প্রমাণিত যা এই ডেটা সেটটির জন্য এই আর্কিটেকচারের জন্য অপর্যাপ্ত নিয়মিতকরণ দেখায়। অতিরিক্ত মানসিকতার সমাধান না করা হলে আপনি অন্য কোনও হাইপারপ্যারামিটারগুলি (স্বাভাবিককরণের কৌশল, শেখার হার ইত্যাদি) টিউন করে উন্নতি পাওয়ার সম্ভাবনা পাবেন না।

এননেট ব্যবহার করার সময়, আমি নিম্নলিখিতগুলি সুপারিশ করি:

  1. আর্কিটেকচারগুলি থেকে শুরু করুন যা ভাল ফলাফলের জন্য পরিচিতদের নকল করে বা প্রতিলিপি করে
  2. নেটওয়ার্কে অতিরিক্ত-ফিট করার জন্য একটি নির্দিষ্ট চোখের সাথে আপনার ডেটা সেটটিতে পারফরম্যান্স যাচাই করুন (ট্রেন-পরীক্ষার ত্রুটির উল্লেখযোগ্য বিচ্যুতি দ্বারা প্রমাণিত)
  3. অতিরিক্ত ফিটনেস পর্যবেক্ষণ করা হলে অতিরিক্ত নিয়মিতকরণ (ড্রপআউট হার বৃদ্ধি) যুক্ত করুন (অতিরিক্ত পোশাক প্রতিরোধের জন্য আপনি "যথেষ্ট" সন্ধান করছেন - অত্যধিক পরিমাণে কম-ফিটিং হবে)
  4. উন্নতির সুযোগগুলি অনুসন্ধানের জন্য কাঠামো, প্রশিক্ষণের পদ্ধতি এবং হাইপার-পরামিতিগুলির সাথে পরীক্ষা করুন

পরবর্তী বিষয়গুলি সম্পর্কে প্রেসক্রিপশনগুলি আসলে আসা বেশ শক্ত, কারণ কাঠামো, প্রশিক্ষণ বা হাইপার-পরামিতিগুলি কোনও প্রদত্ত ডেটা সেটে পারফরম্যান্স অর্জনের জন্য কীভাবে যোগাযোগ করে তার জন্য তাত্ত্বিক ভিত্তি খুব কম। বেঞ্চমার্ক ডেটা সেটগুলিতে একইভাবে উচ্চ-স্তরের পারফরম্যান্স অর্জনে প্রকাশিত আর্কিটেকচারদের দ্বারা নিযুক্ত পদ্ধতিগুলি এত বড় যে এর প্রমাণ হয় of

ব্যাচনরমালাইজেশন কিছু আর্কিটেকচারকে উল্লেখযোগ্যভাবে উন্নতি করতে দেখা গেছে, তবে অন্যরা এটি ব্যতীত বেশ ভাল করতে পারে (বা এর উপস্থিতিতে উদাসীন)। এখানে সরবরাহের একমাত্র আসল গাইডেন্স হ'ল এটি চেষ্টা করে দেখুন এবং এটি সহায়তা করে কিনা।

প্রশিক্ষণ চলাকালীন আন্তঃ-যুগের বর্ধনশীল কর্মক্ষমতা সম্পর্কিত চা পাতাগুলি পড়ার উপযুক্ত দক্ষতা এবং কনভনেটগুলির গভীর বোঝার সাথে আপনি যদি উন্নত অনুশীলনকারী না হন তবে সাধারণত ফাইন টুনিং শেখার হারগুলি এড়ানো উচিত। কাস্টমাইজড লার্নিং রেট এবং অন্যান্য বিশেষ প্রশিক্ষণ ব্যবস্থাগুলি কিছু ক্ষেত্রে নেটওয়ার্কগুলিকে স্থানীয় মিনিমার চারপাশে নেভিগেট করতে এবং আরও ভাল সামগ্রিক সমাধানগুলি খুঁজে পেতে সহায়তা করতে পারে, তবে আপনার যদি প্রচুর সময় না থাকে এবং নেটওয়ার্কের অভিব্যক্তির আচরণটি নির্ণয় করার উপায় না জানা থাকে তবে এটি নয় একটি ভাল জায়গা থেকে শুরু. আমাদের বেশিরভাগেরই অ্যাডামের মতো একটি অপটিমাইজার ব্যবহার করা উচিত যা বিস্তৃত ক্ষেত্রে হ্যান্ড টিউনযুক্ত শিক্ষার হারের দিকে নবজাতক প্রচেষ্টাকে ছাড়িয়ে যাবে।

ইমেজ প্রাক-প্রক্রিয়াকরণ মাধ্যমে ডেটা বৃদ্ধি কখনও কখনও (উল্লেখযোগ্য পারফরম্যান্সের উন্নতি উত্পাদ করতে পারেন সাধারণভাবে, আরো ইনপুট ডেটা ভাল মডেল সাধারণের হবে ভিন্নতা - তথ্য প্রাক-প্রক্রিয়াকরণ ইনপুট স্থান থেকে পরিবর্তন যেখানে আউট-অফ-নমুনা উন্নত করতে পারেন সঠিকতা এবং যোগ mayনিয়মিতকরণের প্রয়োজনীয়তা হ্রাস করার সামর্থ্য - অনুমানের সাথে, অসীম প্রশিক্ষণের ডেটা সহ আমাদের কোনও নিয়মিতকরণের প্রয়োজন হবে না, তবে চিত্র প্রক্রিয়াকরণের জায়গাতে আমরা সেই অ্যাসিম্পোটোটের কাছে যাওয়ার সম্ভাবনা নেই)। এটি প্রশিক্ষণের সময় এবং ধীরে ধীরে রূপান্তর হারগুলি উল্লেখযোগ্যভাবে বাড়িয়ে তুলতে পারে, এবং ইনপুট চিত্রের ক্রমবর্ধমান কৌশলগুলি (আবর্তন, ক্রপিং, স্কেলিং, নয়েজিং ইত্যাদি) সম্পর্কিত হাইপারপ্যারামিটারগুলির একটি সম্পূর্ণ অন্যান্য সেট উপস্থাপন করে। যেহেতু এই পথটি প্রশিক্ষণের সময় বাড়িয়ে তুলতে পারে এবং ফলাফলগুলি টিউন করার জন্য অতিরিক্ত পরীক্ষাগুলির প্রয়োজন হতে পারে, কিছু সাধারণ পরামর্শ হ'ল প্রথমে বর্ধন ছাড়াই আপনার নেটওয়ার্কে সর্বোত্তম নির্ভুলতার জন্য গাড়ি চালানো, তারপরে দেখুন কিছুটা পরিমিত বর্ধন ফলনের উন্নতি হয়েছে কিনা। যদি এটি হয় তবে এটি আরও পরীক্ষার পরোয়ানা জারি করতে পারে।

যে কোনও এবং সমস্ত টিউনিং পরীক্ষার জন্য আপনাকে অতিরিক্ত ও কম-ফিটনেস আচরণের পরিবর্তনের জন্য নজর রাখা প্রয়োজন। নেটওয়ার্ক আর্কিটেকচার, প্রশিক্ষণ পদ্ধতি বা হাইপারপ্যারামিটারগুলি পরিবর্তনের জন্য ড্রপআউট নিয়মিতকরণের অতিরিক্ত সুরের প্রয়োজন হতে পারে। ট্রেন / টেস্টের পারফরম্যান্স থেকে অতিমাত্রায় এবং আন্ডার-ফিটিং আচরণগুলি অনায়াসে নির্ধারণের ক্ষমতাটি এননেটসের সাথে কাজ করার পক্ষে যুক্তিযুক্তভাবে সবচেয়ে গুরুত্বপূর্ণ বেসলাইন দক্ষতা এবং এটি অভিজ্ঞতার সাথে আরও স্বজ্ঞাত হয়ে ওঠে।

এটি মোমবাতি যার মাধ্যমে আপনার সমস্ত প্রচেষ্টা পরিচালিত হবে। মোমবাতিটি কেবল পথটিকে আলোকিত করতে পারে তবে এটি ছাড়া আপনি অন্ধকারে হোঁচট খাবেন। যদি আপনার নেটওয়ার্কটি খারাপভাবে ওভার-বা কম-ফিটিং হয় তবে নেটওয়ার্ক স্ট্রাকচার বা হাইপারপ্যারামিটারের এলোমেলোভাবে অনুমতি দেওয়ার চেষ্টা করার আগে এটি সমাধান করা উচিত।

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

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

সময়, দক্ষতা এবং সংস্থানগুলি (ডেডিকেটেড জিপিইউ) নেটওয়ার্কগুলিকে অত্যন্ত উচ্চ স্তরের পারফরম্যান্সে প্রশিক্ষণের জন্য প্রয়োজনীয় প্রাক-প্রশিক্ষিত নেটওয়ার্কগুলির জনপ্রিয়তার অংশ ব্যাখ্যা করে।


1
আপনার নিউরাল নেটওয়ার্ক আর্কিটেকচারগুলিতে কোনও পুলিং স্তর নেই? এটি প্যারামিটারগুলির অপরিবর্তনীয় সংখ্যা তৈরি করে না?
স্প্যান্ডি

2
পুলিং - পিএফটি! ওভাররেটেড. এটি একটি সর্বাত্মক পদ্ধতি ব্যবহার করে যা পুলিংয়ের পরিবর্তে ডেসিমেশনের জন্য স্ট্রাইডিং ব্যবহার করে - বর্ণনার জন্য লিঙ্কযুক্ত নথিটি দেখুন। কনভ্যুলেশনাল স্ট্রাইডিং কিছুটা ভিন্ন উপায়ে পুলিংয়ের মতো একই "ফানেলিং" এফেক্ট পেতে পারে। যে তারা উভয়ই কাজ করে কেবল চিত্রিত করে যে এই স্টাফগুলির কোনও কেন কাজ করে সে বিষয়ে দাঁড়ানোর মতো দৃ firm় তাত্ত্বিক ক্ষেত্র নেই of
T3am5hark

6

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

আপনি একটি অত্যন্ত নিয়মিত (ড্রপ-আউট স্তর) আর্কিটেকচার ব্যবহার করছেন, যা খারাপ নয়। যাইহোক, এটি অবাক করার মতোও নয় যে প্রশিক্ষণটি কোনও নিয়মিতকরণ ছাড়াই বেশি সময় নেয়। ড্রপ-আউট স্তরগুলির কারণে, আপনার পক্ষে (যথেষ্ট পরিমাণে) স্যফিট হওয়ার সম্ভাবনা কম।

আপনি শেখার ক্ষেত্রে গতি বাড়ানোর চেষ্টা করতে পারেন:

আমি। শিখার হারটিকে স্নাতক করুন: উদাহরণস্বরূপ একটি ছোট্ট দিয়ে শুরু করুন, এটি মাঝখানে বাড়ান এবং শেষের দিকে এটি আবার নীচে নামান।

আ। যোগ batchnormalisation : উপরে স্থাপত্যে, আপনি উভয় আপনার convolutional ব্লক এবং ঘন স্তরগুলোতে ব্যাচ-আদর্শ অন্তর্ভুক্ত করতে পারে। সাধারণত, ব্যাচ-নর্মের স্তরটি ননলাইনার অ্যাক্টিভেশন পরে যুক্ত হয় তবে ড্রপআউটের আগে। আমি নিশ্চিত নই যে ব্যাচ-আদর্শ কতটা ম্যাকনরমের সাথে খেলে। আপনার ঘন স্তরগুলির জন্য, আমি ব্যাচ-নর্মম + ম্যাক্সোনর্ম ছাড়াই / ছাড়াই চেষ্টা করব। আমার মনে হচ্ছে আপনি ব্যাচের নরমালাইজেশন প্রয়োগ করলে আপনার সর্বোচ্চ প্রয়োজন হবে না।

III। ব্যাচের আকার বাড়ান: আপনার ব্যাচ-আকারটি কী এবং আপনার কোনও জিপিইউ রয়েছে কিনা তা নিশ্চিত I আপনার যদি জিপিইউ থাকে তবে আপনার সম্ভবত ব্যাচ-সাইজটি 32 এর গুণকগুলিতে সর্বোচ্চ করার চেষ্টা করা উচিত।

অবশেষে, আপনার ডেটা 'শেখার যোগ্য' / দুর্নীতিগ্রস্থ নয় তা নিশ্চিত করার জন্য (উদাহরণস্বরূপ, আপনি অনিচ্ছাকৃতভাবে এটি মোটা করার জন্য কোনও রূপান্তর প্রয়োগ করেননি), আমি আপনার আর্কিটেকচার থেকে সমস্ত নিয়মিতকরণ দূরে সরিয়ে দেব, প্রশিক্ষণ চালিয়ে যাব এবং দেখুন যে আপনি প্রশিক্ষণ সংস্থার চেয়ে বেশি উপযোগী করতে পারেন । আপনি যদি প্রশিক্ষণ ডেটা সাফল্যের সাথে শিখতে পারেন তবে বাকিটি হ'ল সাধারণীকরণ অনুশীলন। যদি আপনি কোনও নিয়মিতকরণ না করেও প্রশিক্ষণের ডেটাটিকে উপেক্ষা করতে না পারেন তবে সম্ভবত আপনার মডেলটির আরও বেশি ক্ষমতা (গভীর এবং বিস্তৃত আর্কিটেকচার) প্রয়োজন।


পরামর্শ জন্য দয়া করে ধন্যবাদ! আপনি ম্যাক্সনর্ম সামান্য হস্তক্ষেপ সম্পর্কে ঠিক ছিলেন। তবুও, ব্যাচনরমালাইজেশন স্তরগুলি যোগ করার পরেও (দয়া করে আপডেট দেখুন) এবং ম্যাক্সনরম সহ উভয়ই সরানো / সরিয়ে ফেলা, যথার্থতা এখনও কম। হয় না কোনও বৃদ্ধি। আমার একটি জিপিইউ আছে, এবং আমি 64৪,128,256 এবং 512 ব্যাচে প্রশিক্ষণের চেষ্টা করেছি তবে সামান্য পার্থক্য লক্ষ্য করা যায়। শেখার হার সম্পর্কে, আমি অ্যাডাম অপ্টিমাইজারটি ব্যবহার করছি এবং ভেবেছি এটি আরও কমবেশি একা ছেড়ে দেওয়া উচিত? নিঃসন্দেহে আমি 0.05, 0.001, 0.0005 এ এলআর চেষ্টা করেছিলাম এবং ডিফল্ট ০.০০০ টি এখনও সেরা বলে মনে করেছি। কোন ধারনা?
ব্যবহারকারী4779

এছাড়াও আমি জরিমানা তুলতে সক্ষম। আমি কাগজগুলিতে আর্কিটেকচারটি অনুলিপি করার জন্য যথাসাধ্য চেষ্টা করেছি যা এমএনআইএসটি 10 ​​এর সাথে 80% ++ নির্ভুলতা অর্জন করতে সক্ষম বলে মনে হয়। আমি যখন দীর্ঘকালীন যুগের জন্য মডেল প্রশিক্ষণটি ছেড়ে দিচ্ছি তখন মনে হয় ক্ষতি এখন বেড়ে যায় (20 টিরও বেশি পর্ব)।
ব্যবহারকারী4779

মন্তব্য সংশোধন করা - মডেলটির পরিবর্তনের পরে, গ্রাফগুলি সূচিত করে যে এটি উপাত্তকে উল্লেখযোগ্যভাবে উপস্থাপন করছে (
e

আমি এখানে প্রস্তাবের পরামর্শের ইউটিলিটিটি এখানে বিশেষত নতুন অনুশীলনকারীদের জন্য বিতর্ক করছি। এগুলি আপনি যা করতে পারেন তা নিশ্চিত, তবে সিএনএন-তে নতুন যারা আছেন এবং এই জিনিসগুলি কীভাবে কাজ করে তা সম্পর্কে অন্তর্দৃষ্টি বা বোধগম্যতা নেই, অন্ধ বিচার ব্যতীত অন্য কোনও নির্দেশমূলক নির্দেশিকা ছাড়াই টুইঙ্ক করা অনেক বেশি গাঁটছাঁটি এবং লিভার এবং ত্রুটি, ইতিবাচক ফলাফল পাওয়ার সম্ভাবনা কম। সর্বনিম্ন ট্যুইডলিং দিয়ে ভাল (সেরা প্রকাশিত নয়) পারফরম্যান্স পেতে সক্ষম এমন সহজ স্থাপত্যগুলি দিয়ে প্রথমে শুরু করা ভাল then আমার দুই সেন্ট.
T3am5hark

আরও বিস্তৃত করার জন্য - শেখার হারের সাথে খেলবেন না, অ্যাডাম ব্যবহার করুন। এটি শেখার হারগুলি 99,99% সময়ের হ্যান্ড-টিউনিংকে হারাতে চলেছে। এছাড়াও - বিবৃতি যে এটি "আপনি কখনই বেশি উপকার পাবেন না" এর বিবৃতিটি কেবল সাধারণ ভুল (যেমন ফলো-আপ গ্রাফিকগুলি দ্বারা উল্লেখ করা হয়েছে যা এখন উল্লেখযোগ্যভাবে অতিরিক্ত-ফিটনেস দেখায়), এবং পোস্টার এটি ধরে নেওয়ার কোনও ভাল কারণ নেই ... ওভার-ফিটিং প্রতিরোধে প্রদত্ত ড্রপআউট হার পর্যাপ্ত পরিমাণে নিয়মিত করবে কিনা তা প্রদত্ত আর্কিটেকচারের জন্য আপনাকে প্রাইমারী বলার কিছু নেই।
T3am5hark

1

আমি আজ এটি একটি শট দিয়েছি এবং ধারাবাহিকভাবে পরীক্ষার নির্ভুলতায় 75-80% এর কাছে হিট করতে সক্ষম হয়েছি।

প্রশিক্ষণের ইতিহাস

  • ব্যবহৃত পরামিতিগুলির মোট সংখ্যা ছিল: 183,242

  • আপনি আরও কয়েকটি স্তর যোগ করে আরও ভাল করতে পারেন তবে আপনার অতিরিক্ত হওয়ার দরকার নেই। আরও জটিল নেটওয়ার্কগুলি সবসময় আরও ভাল ফলাফলের ফলাফল করে না।

পরামর্শ

আপনার কাছে আমার পরামর্শ হ'ল আপনি আপনার আর্কিটেকচারটি সহজ রাখেন। ওকামের রেজার অনুসরণ করুন , সহজ আরও ভাল।

  • আপনার তথ্য স্কেল

  • এলোমেলো বীজ ব্যবহার করবেন না

  • উপযুক্ত অপ্টিমাইজার ব্যবহার করুন; আমি কেরাসের মতো অ্যাডাডেলটা ব্যবহার করেছি।

  • সিএনএনগুলিকে সংশ্লেষ করার দরকার নেই; সহজবোধ্য রাখো

  • গভীর চর্মসার নেটওয়ার্কগুলি কখনও কখনও বৃহত্তরগুলির চেয়ে ভাল কাজ করে

  • নিয়মিতকরণ (যেমন ড্রপআউট) ব্যবহার করুন

নীচে আমার কোডটি রয়েছে (কেরাস ব্যবহার করে)

# Define the model
model = Sequential()
model.add(Convolution2D(64, (4, 4), padding='same', input_shape=(3, 32, 32)))
model.add(MaxPooling2D(pool_size=(2, 2), strides=2))
model.add(Activation('relu'))
model.add(Dropout(0.25))
model.add(Convolution2D(64, (2, 2), padding='same'))
model.add(Activation('relu'))
model.add(Dropout(0.25))
model.add(Convolution2D(32, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(Dropout(0.25))
model.add(Convolution2D(32, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=2))
model.add(Dropout(0.15))
model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.25))
model.add(Dense(64))
model.add(Activation('tanh'))
model.add(Dropout(0.25))
model.add(Dense(num_classes, activation='softmax'))
# Compile the model
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.