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

با تشکر

دسته بندی ها

0 امتیاز

با سلام
بر اساس آموزش جناب دکتر رضوی(تشکر فراروان) اقدام به پیاده سازی شبکه کانولوشن کردم ولی با خطای:

 Input 0 is incompatible with layer conv2d_2: expected ndim=4, found ndim=2

مواجه هستم. ممنون میشم کد زیر را نگاهی بندازید.
ممنون و قدردان زحمات شما.

import numpy as np
import matplotlib.pyplot as plt

import keras
from keras.datasets import cifar10
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Dense, Dropout ,Flatten, Activation
from keras.layers import Conv2D, MaxPooling2D

# %matplotlib inline

image_size = 32
num_channels = 3
num_classes = 10
epochs =2 
# epochs =20
data_augmentation =True
num_features = image_size * image_size * num_channels

#num_train = 49000

# Load CIRAR10 Dataset

(X_train, y_train), (X_test, y_test) = cifar10.load_data()
print('Training set shap: {} '.format(X_train.shape))

print('Train data shape: {}'.format(X_train.shape[0]))
print('Test  data shape: {}'.format(X_test.shape[0]))

#Data Visualization
class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
samples_per_class = 4

plt.figure(figsize=(16,8))

for cls, name in enumerate(class_names):
    idxs = np.flatnonzero(y_train == cls)
    idxs = np.random.choice(idxs, samples_per_class, replace=False)
    for i, idx in enumerate(idxs):
        plt.subplot(samples_per_class, num_classes, i * num_classes + cls + 1)
        plt.imshow(X_train[idx], interpolation='spline16')
        plt.axis('off')
        if i == 0:
            plt.title(class_names[cls])
            
# Convert 4D arrays to 2D arrays
X_train = X_train.reshape([-1, num_features])
X_test  =  X_test.reshape([-1, num_features])

print('Train data shape: {}'.format(X_train.shape))
print('Test  data shape: {}'.format(X_test.shape))

#Data Preprocessing

# convert pixel range from [0, 255] to [0., 1.]
X_train = X_train.astype('float32')
x_test  = X_test.astype('float32')

mu = np.mean(X_train, axis=0)

X_train -= mu
x_test -= mu

#same scales for features 

X_train /= 255.0
x_test /= 255.0

#One-Hot encodding
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test  = keras.utils.to_categorical(y_test,  num_classes)

print(y_train.shape)
print(y_test.shape)

#def create_cnn():
model = Sequential()

    # Conv Block 1
model.add(Conv2D(64, (3, 3), padding='same', input_shape=X_train.shape[1:], activation='relu'))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

    # Conv Block 2
model.add(Conv2D(128, (3, 3), padding='same', activation='relu'))
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

    # Conv Block 3
model.add(Conv2D(256, (3, 3), padding='same', activation='relu'))
model.add(Conv2D(256, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

    # Classifier
model.add(Flatten())
model.add(Dense(128, activation='relu'))
    #model.add(Dropout(0.25))
model.add(Dropout(0.5))
    
model.add(Dense(num_classes, activation='softmax'))
    
#    return model

#model = create_cnn()

#print model
model.summary()
توسط (107 امتیاز)

1 پاسخ

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

سلام
شما برای لایه کانولوشن، ورودیتون باید 4 بعدی باشه، اما شما اون اول اومدید عکسهاتون رو reshape کردید به یه آرایه 1 بعدی

X_train = X_train.reshape([-1, num_features])
X_test = X_test.reshape([-1, num_features]) 

ممکنه شما این کارو برای نرمال سازی داده ها انجام داده باشید(هرچند میشد توی همون حالت عکس هم داده‌ها رو نرمال کرد و نیازی به تبدیل عکس به بردار نبود)، اما به هر حال باید دوباره اون بردار یه بعدی رو به صورت عکس در بیارید
برای مثال قبل از model=Sequential می تونید کدی شبیه زیر رو اضافه کنید

X_train = X_train.reshape([-1, image_size, image_size, num_channels])
X_test = X_test.reshape([-1, image_size, image_size, num_channels])

هرچند بازم توصیه میکنم، از اولش داده ها رو به صورت بردار تبدیل نکنید چون واقعا نیازی به این کار نیست

توسط (1.6k امتیاز)
انتخاب شده توسط
با سلام و احترام،
عالی، واقعا بسیار ممنونم. سلامت و شاد باشید.
...