pythonでCNNの勉強をしています。
pycharmでCNNを動かした際には動作の確認はできましたが、colabで実行した際にはエラーが起きました。
これはcolabの不具合なのでしょうか?
それともcolabとpycharmの違いによってなにかの記述方法が間違ってるのでしょうか?
※以前は動かせたのですが、パラメータを調整していたら、動かなくなりました。
python
1!pip install -U -q PyDrive 2 3from pydrive.auth import GoogleAuth 4from pydrive.drive import GoogleDrive 5from google.colab import auth 6from oauth2client.client import GoogleCredentials 7 8auth.authenticate_user() 9gauth = GoogleAuth() 10gauth.credentials = GoogleCredentials.get_application_default() 11drive = GoogleDrive(gauth) 12 13 14id = '' # 共有リンクで取得した id= より後の部分 15downloaded = drive.CreateFile({'id': id}) 16downloaded.GetContentFile('Group1.zip') 17 18!unzip Group1.zip 19 20id = '' # 共有リンクで取得した id= より後の部分 21downloaded = drive.CreateFile({'id': id}) 22downloaded.GetContentFile('Group2.zip') 23 24!unzip Group2.zip 25 26 27id = '' # 共有リンクで取得した id= より後の部分 28downloaded = drive.CreateFile({'id': id}) 29downloaded.GetContentFile('Group3.zip') 30 31!unzip Group3.zip 32 33 34from sklearn.model_selection import train_test_split 35from PIL import Image 36import glob 37from keras.utils import np_utils 38from keras.models import Sequential 39from keras.layers import Dense, Activation, Dropout, Flatten,Conv2D, MaxPooling2D 40from keras.layers.normalization import BatchNormalization 41import numpy as np 42import matplotlib.pyplot as plt 43 44 45folder = ["Group1", "Group2", "Group3"] 46image_size = 100 47class_num = 3 48 49X = [] 50Y = [] 51for index, name in enumerate(folder): 52 dir = "./" + name 53 files = glob.glob(dir + "/*.jpg") 54 for i, file in enumerate(files): 55 image = Image.open(file) 56 image = image.convert("RGB") 57 image = image.resize((image_size, image_size)) 58 data = np.asarray(image) 59 X.append(data) 60 Y.append(index) 61 62X = np.array(X) 63Y = np.array(Y) 64 65 66X = X.astype('float32') 67X = X / 255.0 68 69 70# 正解ラベルの形式を変換 71Y = np_utils.to_categorical(Y, class_num) 72 73 74# 学習用データとテストデータ 75X_train, x_test, Y_train, y_test = train_test_split(X, Y, test_size=0.15) 76x_train, x_val, y_train, y_val = train_test_split(X_train, Y_train, test_size=0.1) 77 78# CNNを構築 79model = Sequential() 80 81model.add(Conv2D(filters=96, kernel_size=(11, 11), padding='same', input_shape=(image_size, image_size, 3), activation='relu')) 82model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2))) 83model.add(BatchNormalization()) 84model.add(Conv2D(filters=256, kernel_size=(11, 11), activation='relu')) 85model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2))) 86model.add(BatchNormalization()) 87model.add(Conv2D(filters=385, kernel_size=(3, 3), activation='relu')) 88model.add(BatchNormalization()) 89model.add(Conv2D(filters=385, kernel_size=(3, 3), activation='relu')) 90model.add(BatchNormalization()) 91model.add(Conv2D(filters=256, kernel_size=(3, 3), activation='relu')) 92model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2))) 93model.add(Conv2D(filters=385, kernel_size=(3, 3), activation='relu')) 94model.add(BatchNormalization()) 95 96model.add(Flatten()) 97model.add(Dense(4096, activation='relu')) 98model.add(Dropout(0.4)) 99model.add(BatchNormalization()) 100model.add(Dense(4096, activation='relu')) 101model.add(Dropout(0.4)) 102model.add(BatchNormalization()) 103model.add(Dense(1000, activation='relu')) 104model.add(Dropout(0.4)) 105model.add(BatchNormalization()) 106model.add(Dense(class_num, activation='softmax')) 107 108 109model.summary() 110 111model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 112 113epochs = 1 114batch_size = 32 115 116history = model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_data=(x_val, y_val)) 117 118#評価 & 評価結果出力 119print('loss, accc', model.evaluate(x_test, y_test)) 120 121 122loss = history.history['loss'] 123val_loss = history.history['val_loss'] 124epochs = len(loss) 125plt.plot(range(epochs), loss, marker = '.', label = 'loss') 126plt.plot(range(epochs), val_loss, marker = '.', label = 'val_loss') 127plt.legend(loc = 'best') 128plt.grid() 129plt.xlabel('epoch') 130plt.ylabel('loss') 131#plt.savefig('epochs.pdf') 132plt.show()引用テキスト 133 134 135acc = history.history['acc'] 136val_acc = history.history['val_acc'] 137epochs = len(acc) 138plt.plot(range(epochs), acc, marker = '.', label = 'acc') 139plt.plot(range(epochs), val_acc, marker = '.', label = 'val_acc') 140plt.legend(loc = 'best') 141plt.grid() 142plt.xlabel('epoch') 143plt.ylabel('acc') 144#plt.savefig('epochs.pdf') 145plt.show() 146
error
1ValueError: Error when checking input: expected conv2d_1_input to have 4 dimensions, but got array with shape (0, 1)
回答1件
あなたの回答
tips
プレビュー