前提
3入力1出力のCNNを構築しています。
今回はmodel.fitの段階でエラーが生じたため質問させていただきます。
実現したいこと
構築したCNNで正常に学習させたい
発生している問題・エラーメッセージ
Traceback (most recent call last):
File "C:\dl\data\3input.py", line 128, in <module>
hist = model.fit([train_generator1,train_generator2,train_generator3],
File "C:\Users\sherl\AppData\Local\Programs\Python\Python310\lib\site-packages\keras\utils\traceback_utils.py", line 70, in error_handler
raise e.with_traceback(filtered_tb) from None
File "C:\Users\sherl\AppData\Local\Programs\Python\Python310\lib\site-packages\keras\engine\data_adapter.py", line 1083, in select_data_adapter
raise ValueError(
ValueError: Failed to find data adapter that can handle input: (<class 'list'> containing values of types {"<class 'keras.preprocessing.image.DirectoryIterator'>"}), <class 'NoneType'>
該当のソースコード
from keras.layers import Input, Dense, concatenate
from keras.models import Model
from keras.optimizers import SGD
from keras.preprocessing.image import ImageDataGenerator
from PIL import Image
import keras
import glob
import numpy as np
import os
num_classes = 3
batch_size = 16
epochs = 100
data_dir = './comp'
filename = '3inputs'
inputs1 = Input(shape=(256,256,3))
inputs2 = Input(shape=(256,256,3))
inputs3 = Input(shape=(256,256,3))
X = []
Y = []
#for Dimple
for f in glob.glob('/comp/D/*.jpg'):
fname = os.path.split(f)[1]
file_path = '/comp/D/'+ fname
im = np.assary(Image.open(file_path))
X.append(im)
label = [0]
Y.append(label)
#for QC
for f in glob.glob('/comp/QC/*.jpg'):
fname = os.path.split(f)[1]
file_path = '/comp/QC/'+ fname
im = np.assary(Image.open(file_path))
X.append(im)
label = [1]
Y.append(label)
#for IG
for f in glob.glob('/comp/IG/*.jpg'):
fname = os.path.split(f)[1]
file_path = '/comp/IG/'+ fname
im = np.assary(Image.open(file_path))
X.append(im)
label = [2]
Y.append(label)
X = np.array(X)
Y = np.array(Y)
X_train = X.astype('float32') / 256
Y_train = keras.utils.to_categorical(Y, num_classes)
x = Dense(64, activation = "relu")(inputs1)
x = Dense(64, activation = "relu")(x)
y = Dense(64, activation = "relu")(inputs2)
y = Dense(64, activation = "relu")(y)
z = Dense(64, activation = "relu")(inputs3)
z = Dense(64, activation = "relu")(z)
combined = concatenate([x, y, z])
prediction = Dense(10, activation = "softmax")(combined)
model = Model(inputs = [inputs1, inputs2, inputs3], outputs = prediction)
model.compile(optimizer = SGD(lr = 0.0001, momentum = 0.9),
loss = 'categorical_crossentropy',
metrics = ['accuracy'],
)
model.summary()
#//------Generator1-------//
train_datagen1 = ImageDataGenerator(
rescale= 1./255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip= True
)
validation_datagen1 = ImageDataGenerator(rescale = 1./255)
train_generator1 = train_datagen1.flow_from_directory(
data_dir,
target_size = (256,256),
batch_size = batch_size,
class_mode = 'categorical',
shuffle = True
)
validation_generator1 = validation_datagen1.flow_from_directory(
data_dir,
target_size = (256,256),
batch_size = batch_size,
class_mode = 'categorical',
shuffle = True
)
#//------Generator2-------//
train_datagen2 = ImageDataGenerator(
rescale= 1./255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip= True
)
validation_datagen2 = ImageDataGenerator(rescale = 1./255)
train_generator2 = train_datagen2.flow_from_directory(
data_dir,
target_size = (256,256),
batch_size = batch_size,
class_mode = 'categorical',
shuffle = True
)
validation_generator2 = validation_datagen2.flow_from_directory(
data_dir,
target_size = (256,256),
batch_size = batch_size,
class_mode = 'categorical',
shuffle = True
)
#//------Generator3-------//
train_datagen3 = ImageDataGenerator(
rescale= 1./255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip= True
)
validation_datagen3 = ImageDataGenerator(rescale = 1./255)
train_generator3 = train_datagen3.flow_from_directory(
data_dir,
target_size = (256,256),
batch_size = batch_size,
class_mode = 'categorical',
shuffle = True
)
validation_generator3 = validation_datagen3.flow_from_directory(
data_dir,
target_size = (256,256),
batch_size = batch_size,
class_mode = 'categorical',
shuffle = True
)
#//-------Generator END-------//
hist = model.fit([train_generator1,train_generator2,train_generator3],
epochs = epochs,
verbose= 1,
validation_data = [validation_generator1, validation_generator2, validation_generator3]
)
試したこと
エラー文を見る限り、データ前処理の段階で不具合があるようなので、色々書き換えてみましたが、現状は迷走してしまっています、、、。
補足情報(FW/ツールのバージョンなど)
python
あなたの回答
tips
プレビュー