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

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

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

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

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

画像分類するモデルを作成したい

shishi_maru440
shishi_maru440

総合スコア0

Keras

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

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

-1評価

1クリップ

18閲覧

投稿2021/04/14 22:22

前提・実現したいこと

画像を分類するモデルを作りたい。

発生している問題・エラーメッセージ

モデルをfitさせる時にエラーで実行できない・

ValueError: Found array with dim 3. Estimator expected <= 2.

該当のソースコード

python

import pandas as pd import numpy as np import glob import cv2 from PIL import Image df2 = pd.read_csv("data2.csv") files = glob.glob("/Users/a440/Desktop/happy_images/*") df_files = pd.DataFrame({"data":files}) df2["data"] = "/Users/a440/Desktop/happy_images/" + df2["data"] + ".jpg" df2 = df2.drop("Unnamed: 0", axis=1) df2.to_csv("data2-2.csv") df_join = pd.merge(df2, df_files, how="inner",on="data",indicator=True) #yの設定 smiles =df_join["smile"] target = [] for smile in smiles: data = np.asarray(smile) target.append(data) y = np.array(target) #xの設定 titles = df_join["data"] photo_array = [] for title in titles: bgr = Image.open(title) bgr = bgr.convert("RGB") bgr = bgr.resize((50, 50)) bgr = np.asarray(bgr) photo_array.append(bgr) x = np.array(photo_array) from sklearn.model_selection import train_test_split (train_x,test_x, train_y, test_y) = train_test_split(x, y, test_size=0.3, random_state=0) from sklearn.ensemble import RandomForestClassifier model = RandomForestClassifier(n_estimators = 100,random_state=0) model.fit(train_x, train_y)

OUT

--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-27-2140cc40a840> in <module> 3 model = RandomForestClassifier(n_estimators = 100,random_state=0) 4 ----> 5 model.fit(train_x, train_y) /opt/anaconda3/lib/python3.7/site-packages/sklearn/ensemble/_forest.py in fit(self, X, y, sample_weight) 302 ) 303 X, y = self._validate_data(X, y, multi_output=True, --> 304 accept_sparse="csc", dtype=DTYPE) 305 if sample_weight is not None: 306 sample_weight = _check_sample_weight(sample_weight, X) /opt/anaconda3/lib/python3.7/site-packages/sklearn/base.py in _validate_data(self, X, y, reset, validate_separately, **check_params) 430 y = check_array(y, **check_y_params) 431 else: --> 432 X, y = check_X_y(X, y, **check_params) 433 out = X, y 434 /opt/anaconda3/lib/python3.7/site-packages/sklearn/utils/validation.py in inner_f(*args, **kwargs) 70 FutureWarning) 71 kwargs.update({k: arg for k, arg in zip(sig.parameters, args)}) ---> 72 return f(**kwargs) 73 return inner_f 74 /opt/anaconda3/lib/python3.7/site-packages/sklearn/utils/validation.py in check_X_y(X, y, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, estimator) 800 ensure_min_samples=ensure_min_samples, 801 ensure_min_features=ensure_min_features, --> 802 estimator=estimator) 803 if multi_output: 804 y = check_array(y, accept_sparse='csr', force_all_finite=True, /opt/anaconda3/lib/python3.7/site-packages/sklearn/utils/validation.py in inner_f(*args, **kwargs) 70 FutureWarning) 71 kwargs.update({k: arg for k, arg in zip(sig.parameters, args)}) ---> 72 return f(**kwargs) 73 return inner_f 74 /opt/anaconda3/lib/python3.7/site-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator) 639 if not allow_nd and array.ndim >= 3: 640 raise ValueError("Found array with dim %d. %s expected <= 2." --> 641 % (array.ndim, estimator_name)) 642 643 if force_all_finite: ValueError: Found array with dim 3. Estimator expected <= 2.

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

jbpb0
jbpb0

2021/04/15 02:49

model\.fit\(\.\.\. の直前に下記を追加して、その結果を見て、考えてみてください print\(train_x\.shape\) print\(train_y\.shape\)
shishi_maru440
shishi_maru440

2021/04/15 13:03

現状は print\(train_x\.shape\) >>>\(4508, 50, 50, 3\) print\(train_y\.shape\) >>>\(4508,\) reshape\(-1, 1\)で1次元にしてみてもうまくいかず、、、 print\(train_x\.shape\) >>>\(4508, 7500, 1\) print\(train_y\.shape\) >>>\(4508, 1\) 恐縮ですが解決法ご教示いただければと思います。
jbpb0
jbpb0

2021/04/15 13:24

https://scikit-learn\.org/stable/modules/generated/sklearn\.ensemble\.RandomForestClassifier\.html#sklearn\.ensemble\.RandomForestClassifier\.fit の「fit\(X, y, sample_weight=None\)」に、Xのshapeは「\(n_samples, n_features\)」と書かれてますので、train_xを2次元にする必要があります
shishi_maru440
shishi_maru440

2021/04/15 14:04

titles = df_join\["data"\] photo_array = \[\] for title in titles: bgr = Image\.open\(title\) bgr = bgr\.convert\("RGB"\) bgr = bgr\.resize\(\(50, 50\)\) bgr = np\.asarray\(bgr\) bgr = bgr\.reshape\(-1, 2\) photo_array\.append\(bgr\) x = np\.array\(photo_array\) x\.shape >>>\(6441, 3750, 2\) これでもうまくいかなかったのですが何が間違っていルのでしょうか。 お手数おかけして申し訳ありません。
jbpb0
jbpb0

2021/04/15 14:06

2次元なので、 print\(train_x\.shape\) >>>\(4508, 7500\) となるようにしてみてください
shishi_maru440
shishi_maru440

2021/04/15 14:25

bgr = bgr\.reshape\(-1\)でできました。 少し2次元に解釈が間違っていることに気づきました。 大変助かりました。 ありがとうございます。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Keras

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

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。