質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

1回答

3760閲覧

error の内容がわからない (keras, Conv2D)

Ami_hamu

総合スコア4

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

0クリップ

投稿2020/09/11 16:56

ValueError: Input 0 of layer conv2d_7 is incompatible with the layer: : expected min_ndim=4, found ndim=1. Full shape received: [None]

というerrorがでましたが、なにが原因でerrorが出ているのかこの文章から理解できません。このerrorは、mainという関数を呼び出した時に出てきました。Errorの原因と、その直し方を教えてください。

(環境:google Colaboratory)


from PIL import Image
import os, glob
import numpy as np
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True

classes = ["Jomon", "Yayoi"]
num_classes = len(classes)
image_size = 64
num_testdata =25
x_train =[]
x_test = []
y_train = []
y_test = []

for index, classlabel in enumerate(classes):
photos_dir = "./"+ classlabel
files = glob.glob(photos_dir + "/*.jpg")
for i, file in enumerate(files):
image = Image.open(file)
image = image.convert("RGB")
image = image.resize((image_size, image_size))
data = np.asarray(image)
if i < num_testdata:
x_test.append(data)
y_test.append(index)
for angle in range(-20, 20, 5):
img_r = image.rotate(angle)
data = np.asarray(img_r)
x_train.append(data)
y_train.append(index)

img_trains = img_r.transpose(Image.FLIP_LEFT_RIGHT) data = np.asarray(img_trains) x_train.append(data) y_train.append(index)

x_train = np.array(x_train)
x_test = np.array(x_test)
y_train = np.array(y_train)
y_test = np.array(y_test)

xy = (x_train, x_test, y_train, y_test)
np.save("./alien_exam.npy", xy)

from keras.models import Sequential#a plain stack of layers where each layer has exactly one input tensor and one output tensor.
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.optimizers import RMSprop
from keras.utils import np_utils
import keras
import numpy as np

classes = ["Jomon", "Yayoi"]
num_classes = len(classes)
image_size = 64

"""
データを読み込み
"""
def load_data():
x_train, x_test, y_train, y_test = np.load("./alien_exam.npy", allow_pickle=True)
x_train = x_train.astype("float") /255
x_test = x_test.astype("float") /255
y_train = np_utils.to_categorical(y_train, num_classes)
y_tets = np_utils.to_categorical(y_test, num_classes)

return x_train, y_train, x_test, y_test

def train(x, y, x_test, y_test):
model = Sequential()

model.add(Conv2D(32,(3,3), padding="same",input_shape=x.shape[1:]))
model.add(Acticaiton("relu"))
model.add(Conv2D(32,(3,3)))
model.add(Acticaiton("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(512))
model.add(Activation("relu"))
model.add(Dropout(0.45))
model.add(Dense(2))
model.add(Activation("softmax"))

opt = RMSprop(lr=0.00005, decay=le-6)
model.compile(lostt="categorical_cossentropy", optimizer=opt, metrics=["accuracy"])
model.fit(x, y, batch_size=28, epochs=40)
model.save("./cnn.h1")

return model

def main():
x_train, y_train, x_test, y_test = load_data()
model = train(x_train, y_train, x_test, y_test)

main()

#ここでErrorがでました。

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

legend_hero

2022/01/24 15:49

自分も同じサイトを参考にし,同じエラーが発生したためどのように解決されたか教えていただけないでしょうか??
guest

回答1

0

ベストアンサー

まず、 Activation のつづりを修正したうえで input_shape に適当な形状を指定してモデルの構造を可視化してみます。

python

1from keras.models import Sequential 2from keras.layers import Conv2D, MaxPooling2D 3from keras.layers import Activation, Dropout, Flatten, Dense 4from keras.optimizers import RMSprop 5from keras.utils import np_utils 6import keras 7import numpy as np 8 9classes = ["Jomon", "Yayoi"] 10num_classes = len(classes) 11image_size = 64 12 13model = Sequential() 14 15model.add(Conv2D(32,(3,3), padding="same",input_shape=(256,256,3))) 16model.add(Activation("relu")) 17model.add(Conv2D(32,(3,3))) 18model.add(Activation("relu")) 19model.add(MaxPooling2D(pool_size=(2,2))) 20model.add(Dropout(0.25)) 21 22model.add(Flatten()) 23model.add(Dense(512)) 24model.add(Activation("relu")) 25model.add(Dropout(0.45)) 26model.add(Dense(2)) 27model.add(Activation("softmax")) 28 29model.summary()

すると下記のように表示されます。

Model: "sequential_3" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d_2 (Conv2D) (None, 256, 256, 32) 896 _________________________________________________________________ activation (Activation) (None, 256, 256, 32) 0 _________________________________________________________________ conv2d_3 (Conv2D) (None, 254, 254, 32) 9248 _________________________________________________________________ activation_1 (Activation) (None, 254, 254, 32) 0 _________________________________________________________________ max_pooling2d (MaxPooling2D) (None, 127, 127, 32) 0 _________________________________________________________________ dropout (Dropout) (None, 127, 127, 32) 0 _________________________________________________________________ flatten (Flatten) (None, 516128) 0 _________________________________________________________________ dense (Dense) (None, 512) 264258048 _________________________________________________________________ activation_2 (Activation) (None, 512) 0 _________________________________________________________________ dropout_1 (Dropout) (None, 512) 0 _________________________________________________________________ dense_1 (Dense) (None, 2) 1026 _________________________________________________________________ activation_3 (Activation) (None, 2) 0 ================================================================= Total params: 264,269,218 Trainable params: 264,269,218 Non-trainable params: 0 _________________________________________________________________

では、試しに入力データをわざと None にしてみると下記のようにエラーになります。

python

1from keras.models import Sequential 2from keras.layers import Conv2D, MaxPooling2D 3from keras.layers import Activation, Dropout, Flatten, Dense 4from keras.optimizers import RMSprop 5from keras.utils import np_utils 6import keras 7import numpy as np 8 9classes = ["Jomon", "Yayoi"] 10num_classes = len(classes) 11image_size = 64 12 13model = Sequential() 14 15model.add(Conv2D(32,(3,3), padding="same",input_shape=([None]))) 16model.add(Activation("relu")) 17model.add(Conv2D(32,(3,3))) 18model.add(Activation("relu")) 19model.add(MaxPooling2D(pool_size=(2,2))) 20model.add(Dropout(0.25)) 21 22model.add(Flatten()) 23model.add(Dense(512)) 24model.add(Activation("relu")) 25model.add(Dropout(0.45)) 26model.add(Dense(2)) 27model.add(Activation("softmax")) 28 29model.summary()
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-8-3e74efe4338a> in <module>() 13 model = Sequential() 14 ---> 15 model.add(Conv2D(32,(3,3), padding="same",input_shape=([None]))) 16 model.add(Activation("relu")) 17 model.add(Conv2D(32,(3,3))) 4 frames /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/input_spec.py in assert_input_compatibility(input_spec, inputs, layer_name) 194 ', found ndim=' + str(ndim) + 195 '. Full shape received: ' + --> 196 str(x.shape.as_list())) 197 # Check dtype. 198 if spec.dtype is not None: ValueError: Input 0 of layer conv2d_7 is incompatible with the layer: : expected min_ndim=4, found ndim=2. Full shape received: [None, None]

考えられる原因としては、x_train = x_train.astype("float") /255 で読み込んでいるデータを input_shape=x.shape[1:] で読み込んだときに空っぽになっているのではないでしょうか。入力として期待している次元数 4 例えば [1,256,256,3] のような四次元に対して、次元数 1 例えば [None] のような一次元のデータが入力されているということです。

投稿2020/09/12 08:17

PINTO

総合スコア351

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問