به بخش پرسش و پاسخ یادگیری عمیق خوش آمدید,
این نسخه آزمایشی سایت است.
لطفا به نکات زیر توجه کنید:
  • برای ارتباط با مدیران میتوانید از صفحه مدیران اقدام کنید.
  • سوال و جواب ها باید به زبان فارسی باشند. استفاده از زبان انگلیسی یا فینگلیش برای پاسخ دادن مجاز نیست.
  • لطفا بعد از پرسش سوال لینک سوال خود را در گرو تلگرام (Iran Deep Learning Group) معرفی کنید تا سریعتر به جواب برسید. برای دسترسی به آخرین لینک از منابع یادگیری استفاده کنید
  • لطفا بجای عکس از متن استفاده کنید. اگر متون طولانی هستند از سایت pastebin.com برای اپلود استفاده کرده و لینک حاصل را در سوال خود قرار دهید. برای قرار دادن تصویر ، از بخش ارسال تصویر ادیتور سایت استفاده کنید.
  • بعد از دریافت پاسخ، بهترین پاسخ را از طریق کلیک بر روی علامت تیک انتخاب کنید
  • اگر با خطا و یا مشکلی مواجه شدید از بخش تماس با ما در انتهای صفحه و یا ایمیل Coderx7@gmail.com موضوع را اطلاع دهید.

با تشکر

دسته بندی ها

0 امتیاز

با سلام من میخوام این مدل رو برا دیتاست خودم بسازم 60*60*1 و 124 تا کلاس منتهی این ارور رومیده

Error when checking input: expected input_6 to have shape (124,) but got array with shape (1,)

و اینم مدلم:

      input_shape = [60, 60, 1]
       num_routing = 3
       NCLASSES =124
      x = layers.Input(shape=input_shape)
      conv1 = layers.Conv2D(filters=256, kernel_size=9, strides=1, padding='valid', 
      activation='relu',
      name='conv1')(x)
      primarycaps = PrimaryCap(conv1, dim_vector=8, n_channels=32, kernel_size=9, strides=2,
      padding='valid')
     digitcaps = DigitCaps(num_capsule=NCLASSES, dim_vector=16, num_routing=num_routing,
     name='digitcaps')(primarycaps)
     v_j_abs = Length(name='v_j_abs')(digitcaps)
     y = layers.Input(shape=(NCLASSES,))

    def Mask(inputs):
  return K.batch_dot(inputs[0], inputs[1], [1, 1])

   masked = layers.Lambda(Mask)([digitcaps, y])
    l = layers.Dense(512, activation='relu')(masked)
    l = layers.Dense(1024, activation='relu')(l)
    l = layers.Dense(3600, activation='sigmoid')(l)
    print(l.shape)
    decoded = layers.Reshape(target_shape=input_shape, name='decoded')(l)
    print(decoded)
    model = keras.models.Model([x, y], [v_j_abs, decoded])
    model.summary()

ممنون میشم چک کنید کد اصلی هم اینجاست روی mnist
https://github.com/leoniloris/CapsNet/blob/master/CapsNet-keras-tf_back.ipynb

توسط (141 امتیاز)

1 پاسخ

+2 امتیاز
 
بهترین پاسخ

سلام
باید کد لود کردن دیتا هاتون رو هم بذارید تا مطمئن بشیم
احتمال داره شما به جای اینکه به صورت one-hot خروجی رو داده باشید، فقط به صورت عدد صحیح دادید.
اگه اینطوری باشه باید قبلش از to_categorical استفاده کنید

توسط (1.6k امتیاز)
انتخاب شده توسط
سلام بله لیبل ها بصورت عدد هستن ن one hot
خب پس مشکل همینه
one hot کنم ؟
دو حالت داره:
اگه  categorical_crossentropy استفاده می کنید، بله باید label ها one-hot باشن
اما اگه sparse_categorical_crossentropy استفاده کنید، خودش تبدیل می کنه و همون اعداد صحیح رو بدید کار می کنه
توی خود مثاله loss رو اینجوری گذاشته
loss=[margin_loss, 'mse']
درسته، این از loss ی که توی تابع margin هست استفاده کرده و بحثش توی مقاله هم هست، اون mse هم برای reconstruction ه که کاری با خطایی که اینجا بهتون داده نداره
اگه شما بخواید همینطوری label رو بدید باید تابع margin_loss رو تغییر بدید. اما کار راحت تر همونه که با to_categorical به one_hot تبدیلش کنید
توی خود کد اصلی ک لینک گذاشتم تعداد کلاس رو 10 داده برا mnist اصن بصورت one hot نیست
چرا، همون اول که اومده از to_categorical استفاده کرده برای همینه
keras.utils.to_categorical(y_train, num_classes=NCLASSES)
خیلی ممنون مشکل حل شد
...