2017-05-17 48 views
0

私は信号を検出しようとしています。私は3つのラベルの画像を持っているので、トレーニングデータと検証データを電車と検証の下に3つのサブフォルダに入れます。私は、プログラムを実行すると、model.fit_generator()のエラーに直面しています。他のものは正常に動作しています。はmodel.fit_generator()にエラーがあります

`

import os 

from keras.layers import Dense, Dropout, Flatten, MaxPooling2D, 
Convolution2D 
from keras.models import Sequential 
from keras.preprocessing.image import ImageDataGenerator 
import keras 
from keras.optimizers import Adam 

NUM_CHANNELS = 3 
IMAGE_WIDTH = 224 # Original: 455 
IMAGE_HEIGHT = 224 # Original: 256 
NUM_CLASSES = 3 
base_script_name = os.path.splitext(__file__)[0] 
filepath=base_script_name + "-{epoch:02d}-val_acc-{val_acc:.2f}.hdf5" 

def get_generator(directory, train): 
if train: 
datagen = ImageDataGenerator(
    rescale=1./255, 
    shear_range=0.2, 
    zoom_range=0.2, 
    horizontal_flip=True) 
else: 
datagen = ImageDataGenerator(rescale=1./255) 
return datagen.flow_from_directory(
directory=directory, 
target_size=(IMAGE_WIDTH, IMAGE_HEIGHT), 
batch_size=8, 
class_mode='categorical') 

model = Sequential([ 
Convolution2D(16, 3, 3, border_mode='same', subsample=(2, 2), input_shape= 
(IMAGE_WIDTH, IMAGE_HEIGHT, NUM_CLASSES), activation='relu'), 
MaxPooling2D(pool_size=(3, 3)), 
Dropout(0.2), 

Convolution2D(32, 3, 3, border_mode='same', activation='relu'), 
MaxPooling2D(pool_size=(3, 3)), 
Dropout(0.2), 

Convolution2D(64, 3, 3, border_mode='same', activation='relu'), 
MaxPooling2D(pool_size=(2, 2)), 
Dropout(0.2), 

Flatten(), 
Dense(128, activation='tanh'), 
Dropout(0.3), 
Dense(NUM_CLASSES, activation='softmax'), 
]) 
model.summary() 

directory = '/home/nishat/traffic_light/nexar/try/data/' 
train_generator = get_generator(directory+'/train', True) 
validation_generator = get_generator(directory+'valid', False) 

model.compile(optimizer=Adam(lr=0.0003), loss='categorical_crossentropy', 
metrics=['accuracy']) 

# Callbacks 
checkpoint = keras.callbacks.ModelCheckpoint(filepath, monitor='val_acc', 
verbose=1, save_best_only=False, mode='auto') 
tensorboard = keras.callbacks.TensorBoard(log_dir='./tensorboar', 
histogram_freq=0, write_graph=True, write_images=True) 
callbacks = [checkpoint, tensorboard] 

model.fit_generator(
train_generator, 
samples_per_epoch=train_generator.shape, 
nb_epoch=200, 
validation_data=validation_generator, 
nb_val_samples=validation_generator.shape, 
callbacks=callbacks, 
) 

model.evaluate_generator(validation_generator, 
val_samples=len(validation_generator.filenames))` 

私はこのようなエラーを取得しています:

Found 16791 images belonging to 3 classes. 
Found 1868 images belonging to 3 classes. 
Traceback (most recent call last): 

    File "<ipython-input-1-303a170ea444>", line 1, in <module> 
    runfile('/home/nishat/traffic_light/nexar/try/train.py', wdir='/home/nishat/traffic_light/nexar/try') 

    File "/home/nishat/anaconda3/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 866, in runfile 
    execfile(filename, namespace) 

    File "/home/nishat/anaconda3/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 102, in execfile 
    exec(compile(f.read(), filename, 'exec'), namespace) 

    File "/home/nishat/traffic_light/nexar/try/train.py", line 69, in <module> 
    samples_per_epoch=train_generator.shape, 

AttributeError: 'DirectoryIterator' object has no attribute 'shape' 

私は自分のコードを変更する必要がある場所、誰もが私を提案することができる場合、私は本当に感謝するでしょう。おかげ

+1

正しい形式でコードを書式設定する必要があります。その前に、書式設定されていないテキストが多数表示されます。 –

+0

コードを書式設定する必要があります。あなたのKerasバージョンは何ですか? 最新のKerasバージョンでは多くの変更が行われました。 次のリンクを確認してください: https://github.com/fchollet/keras/wiki/Keras-2.0-release-notes – orabis

+0

ご迷惑をおかけして申し訳ありません。私はコードをフォーマットしました。ありがとうございます –

答えて

0

2点:

の1- train_generatorとvalidation_generatorは '形状'

model.fit_generator(train_generator, 
        samples_per_epoch=train_generator, 
        nb_epoch=200, 
        validation_data=validation_generator, 
        nb_val_samples=validation_generator, 
        callbacks=callbacks) 

2 - 最新Keras版 'samples_per_epoch'

は 'steps_per_epoch' に名前が変更された属性を持っている、としません。エポックごとの「エポック」

手順「nb_epoch」を以下のように計算することができます

steps_per_epoch = int(math.ceil(float(train_ds_len)/batch_size)) 
関連する問題