現在、自分で作った機械学習モデルをXcodeで使用しようと思っており、coremltoolsでの変換を試みているのですがうまくいきません。
具体的には入力を配列でなく画像にしたいです。
これは機械学習モデルに問題があるのでしょうか。それとも変換する部分のプログラムがおかしいのでしょうか。
アドバイスよろしくお願いいたします。
機械学習モデルです
from keras.models import Sequential from sklearn.metrics import mean_squared_error as mse from keras.layers import Activation, Dense, Dropout from keras.utils.np_utils import to_categorical from keras.optimizers import Adagrad from keras.optimizers import Adam import numpy as np from PIL import Image import os image_list = [] label_list = [] for dir in os.listdir("/Users/python2/data/train_Dataset"): if dir == ".DS_Store": continue dir1 = "/Users/python2/data/train_Dataset/" + dir label = 0 if dir == "dirty": label = 0 elif dir == "clean": label = 1 for file in os.listdir(dir1): if file != ".DS_Store": label_list.append(label) filepath = dir1 + "/" + file image = np.array(Image.open(filepath).resize((64, 64))) print(filepath) image = image.transpose(2, 0, 1) image = image.reshape(1, image.shape[0] * image.shape[1] * image.shape[2]).astype("float32")[0] image_list.append(image / 255.) image_list = np.array(image_list) Y = to_categorical(label_list) # モデルを生成してニューラルネットを構築 model = Sequential() model.add(Dense(200, input_dim = 12288)) model.add(Activation("relu")) model.add(Dropout(0.2)) model.add(Dense(200)) model.add(Activation("relu")) model.add(Dropout(0.2)) model.add(Dense(2)) model.add(Activation("softmax")) opt = Adam(lr=0.001) model.compile(loss="categorical_crossentropy", optimizer=opt, metrics=["accuracy"]) model.fit(image_list,Y, epochs=1480, batch_size=100, validation_split=0.1) total = 0. ok_count = 0. for dir in os.listdir("/Users/python2/data/train_Dataset"): if dir == ".DS_Store": continue dir1 = "/Users/python2/data/test_Dataset/" + dir label = 0 if dir == "dirty": label = 0 elif dir == "clean": label = 1 for file in os.listdir(dir1): if file != ".DS_Store": label_list.append(label) filepath = dir1 + "/" + file image = np.array(Image.open(filepath).resize((64, 64))) print(filepath) image = image.transpose(2, 0, 1) image = image.reshape(1, image.shape[0] * image.shape[1] * image.shape[2]).astype("float32")[0] result = model.predict_classes(np.array([image / 255.])) print("label:", label, "result:", result[0]) total += 1. if label == result[0]: ok_count += 1. print("seikai: ", ok_count / total * 100, "%") model.save('method2.h5')
変換部分です
import coremltools path = 'method2.h5' coreml_model = coremltools.converters.keras.convert( path, image_input_names='image', is_bgr = True, image_scale = 1.0, predicted_feature_name = "label", class_labels = ['dirty', 'clean']) coreml_model.save('convertedmodel.mlmodel')
あなたの回答
tips
プレビュー