سؤال

أنا أستخدم Theano للتصنيف (الشبكات العصبية التلافيفية)

في السابق، كنت أستخدم قيم البكسل للصورة (المسطحة) كميزات NN.والآن أريد إضافة ميزات إضافية.
لقد قيل لي أنه يمكنني ربط ناقل الميزات الإضافية هذا بميزات الصورة المسطحة ثم استخدامه كمدخل للطبقة المتصلة بالكامل، لكني أواجه مشكلة في ذلك.

بداية، هل هذا هو النهج الصحيح؟

إليك بعض مقتطفات التعليمات البرمجية وأخطائي:
مشابه للمثال المقدم من موقعهم مع بعض التعديلات

(من الفصل الذي يبني النموذج)

 # allocate symbolic variables for the data
 self.x = T.matrix('x')   # the data is presented as rasterized images
 self.y = T.ivector('y')  # the labels are presented as 1D vector of [int] labels
 self.f = T.matrix('f') # additional features

أدناه، المتغيرات v و rng يتم تعريفها سابقا.المهم هو layer2_input:

layer2_input = self.layer1.output.flatten(2)
layer2_input = T.concatenate([layer2_input, self.f.flatten(2)])
self.layer2 = HiddenLayer(rng, input=layer2_input, n_in=v, n_out=200, activation=T.tanh)

(من الفصل الذي يتدرب)

train_model = theano.function([index], cost, updates=updates,
          givens={
             model.x: train_set_x[index * batch_size: (index + 1) * batch_size],
             model.y: train_set_y[index * batch_size: (index + 1) * batch_size],
             model.f: train_set_f[index * batch_size: (index + 1) * batch_size]
          })

ومع ذلك، تظهر لي رسالة خطأ عند استدعاء نموذج القطار:

ValueError: GpuJoin: Wrong inputs for input 1 related to inputs 0.!
Apply node that caused the error: GpuJoin(TensorConstant{0}, GpuElemwise{tanh,no_inplace}.0, GpuFlatten{2}.0)
Inputs shapes: [(), (5, 11776), (5, 2)]
Inputs strides: [(), (11776, 1), (2, 1)]
Inputs types: [TensorType(int8, scalar), CudaNdarrayType(float32, matrix), CudaNdarrayType(float32, matrix)]

هل تمثل أشكال الإدخال أشكال x, y و f, ، على التوالى؟

إذا كان الأمر كذلك، فإن الثالثة تبدو صحيحة (حجم الدفعة = 5، وميزتان إضافيتان)، ولكن لماذا تكون الأولى عددية والثانية مصفوفة؟

المزيد من التفاصيل:

train_set_x.shape = (61, 19200) [61 flattened images (160x120), 19200 pixels]
train_set_y.shape = (61,) [61 integer labels]
train_set_f.shape = (61,2) [2 additional features per image]
batch_size = 5

هل لدي الفكرة الصحيحة أم أن هناك طريقة أفضل لتحقيق ذلك؟هل هناك أي رؤى حول سبب ظهور الخطأ؟

هل كانت مفيدة؟

المحلول

كانت المشكلة أنني كنت متسلسلاً على المحور الخطأ.

layer2_input = T.concatenate([layer2_input, self.f.flatten(2)])

كان ينبغي أن يكون

layer2_input = T.concatenate([layer2_input, self.f.flatten(2)], axis=1)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top