python
1# coding:utf-8 2 3import keras 4from keras.utils import np_utils 5from keras.layers.convolutional import Conv2D, MaxPooling2D 6from keras.models import Sequential 7from keras.layers.core import Dense, Dropout, Activation, Flatten 8from keras.preprocessing.image import array_to_img, img_to_array, list_pictures, load_img 9import numpy as np 10import pandas as pd 11from sklearn.model_selection import train_test_split 12import matplotlib.pyplot as plt 13from keras.preprocessing.image import ImageDataGenerator 14from keras.preprocessing import image 15 16 17 18#【学習データの読み込み】 19X = [] 20Y = []#category_name 21datagen = ImageDataGenerator(horizontal_flip=True) 22max_img_num = 10 23 24 25# a画像 26for picture in list_pictures('dir/pic/a'): 27 img = img_to_array(load_img(picture, target_size=(32,32))) 28 X.append(img) 29 Y.append(0) 30 31 img2 = image.load_img(picture, target_size=(32,32)) 32 x = image.img_to_array(img2) 33 x = x.reshape((1,) + x.shape) 34for d in datagen.flow(x, batch_size=1): 35 X.append(image.array_to_img(d[0], scale=True)) 36 if (len(X) % max_img_num) == 0: 37 break 38 X.append(img2) 39 40# b画像 41for picture in list_pictures('/dir/pic/b'): 42 img = img_to_array(load_img(picture, target_size=(32,32))) 43 X.append(img) 44 X.append(img2) 45 46 Y.append(1) 47 48# 画素値を0から1の範囲に変換 49X = X.astype('float32') 50X = X / 255.0 51 52# クラスの形式を変換 53Y = np_utils.to_categorical(Y, 1) 54 55# 学習用データとテストデータ 56X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2) 57 58# 【CNNを構築】 59model = Sequential() 60 61model.add(Conv2D(32, (3, 3), padding='same', 62 input_shape=X_train.shape[1:])) 63 64model.add(Activation('relu')) 65model.add(Conv2D(32, (3, 3))) 66model.add(Activation('relu')) 67model.add(MaxPooling2D(pool_size=(2, 2))) 68model.add(Dropout(0.25)) 69model.add(Conv2D(64, (3, 3), padding='same')) 70model.add(Activation('relu')) 71model.add(Conv2D(64, (3, 3))) 72model.add(Activation('relu')) 73model.add(MaxPooling2D(pool_size=(2, 2))) 74model.add(Dropout(0.25)) 75 76model.add(Flatten()) 77model.add(Dense(512)) 78model.add(Activation('relu')) 79model.add(Dropout(0.6)) 80model.add(Dense(2)) 81model.add(Activation('softmax')) 82 83# 【コンパイル】 84model.compile(loss='categorical_crossentropy',#損失関数 85 optimizer='adam',#最適化、オブジェクト 86 metrics=['accuracy'])#評価関数、正解率 87 88#【学習実行】 89history = model.fit(X_train, y_train, batch_size=64, epochs=1, 90 validation_data = (X_test, y_test), verbose = 1) 91 92 93score = model.evaluate(X_test, y_test, verbose = 1) 94print("正解", score[1], "loss", score[0]) 95 96#【学習をグラフ表示】 97%matplotlib inline 98plt.plot(history.history['acc']) 99plt.plot(history.history['val_acc']) 100plt.title('model accuracy') 101plt.legend(['train', 'test'], loc='upper left') 102plt.show() 103plt.plot(history.history['loss']) 104plt.plot(history.history['val_loss']) 105plt.title('model loss') 106plt.legend(['loss', 'val_loss'], loc='upper left') 107plt.show()
python
1#エラー 2AttributeError 3 Traceback (most recent call last) 4<ipython-input-36-9b9eeea39b2c> in <module> 5 X = X.astype('float32') 6AttributeError: 'list' object has no attribute 'astype' 7
kerasにて自分で拾ってきた画像で学習を行ってます。
本来の画像に加えて、ImageDataGeneratorでオーギュメントした画像のarrayをXに渡したいです。
様々なページを参考にさせていただいたのですが、astypeのエラーが出てしまいます。。。
4次元データを渡しているはずなのですが、なぜエラーが出てしまうのか不明です。
宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/09 00:29
2019/06/09 15:04 編集
2019/06/10 00:34
2019/06/10 01:22 編集