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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

Q&A

解決済

1回答

6434閲覧

Failed to convert a NumPy array to a Tensor (Unsupported object type numpy.ndarray).

Keiti

総合スコア5

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

0グッド

1クリップ

投稿2020/08/25 08:53

編集2020/08/27 06:27

以前まで以下のコードを用いて顔認証を実行できていたのですが、突然エラーが発生し使えなくなりました。
コード自体は編集していないのになぜなのでしょうか?

(追記)
今まではFaceEditedというフォルダに顔の写真を入れていたのですが、今回は眼だけを切り抜いて入れています。どうやらそれが原因のようです。調べてみると画像をnumpy配列に変換した後、そのnumpy配列をtensorへと変換することが出来ていないようです。tf.convert_to_tensorというコードを使えば変換できるということはわかるのですが、どのようにコードをかけばよいのでしょうか。ご教示ください。

from google.colab import drive drive.mount('/content/drive') from __future__ import print_function from keras.utils.np_utils import to_categorical from keras.layers import Activation, Conv2D, Dense, Flatten, MaxPooling2D from keras.models import Sequential import numpy as np import shutil import random import cv2 import glob import os import matplotlib.pyplot as plt '''顔認識したい人の名前を定義する''' # 顔認識する対象を決定(検索ワードを入力) SearchName = ["A","B","C","D"] # 画像の取得枚数の上限 ImgNumber =100 # CNNで学習するときの画像のサイズを設定(サイズが大きいと学習に時間がかかる) ImgSize=(128,128) input_shape=(128,128,3) for name in SearchName: in_dir = '/content/drive/My Drive/FaceEdited/'+name in_jpg=os.listdir(in_dir) #img_file_name_listをシャッフル、そのうち2割をtest_imageディテクトリに入れる random.shuffle(in_jpg) os.makedirs('/content/drive/My Drive/test/' + name, exist_ok=True) for t in range(len(in_jpg)//5): shutil.move("/content/drive/My Drive/FaceEdited/"+name+"/"+str(in_jpg[t]), "/content/drive/My Drive/test/"+name) X_train = [] Y_train = [] for i in range(len(SearchName)): img_file_name_list=os.listdir('/content/drive/My Drive/FaceEdited/'+SearchName[i]) print(img_file_name_list) print("{}:トレーニング用の写真の数は{}枚です。".format(SearchName[i],len(img_file_name_list))) for j in range(0,len(img_file_name_list)-1): n=os.path.join('/content/drive/My Drive/FaceEdited/'+SearchName[i]+"/",img_file_name_list[j]) img = cv2.imread(n) if img is None: print('image' + str(j) + ':NoImage') continue else: r,g,b = cv2.split(img) img = cv2.merge([r,g,b]) X_train.append(img) Y_train.append(i) print("") # テストデータのラベル付け X_test = [] # 画像データ読み込み Y_test = [] # ラベル(名前) for i in range(len(SearchName)): img_file_name_list=os.listdir("/content/drive/My Drive/test/"+SearchName[i]) print("{}:テスト用の写真の数は{}枚です。".format(SearchName[i],len(img_file_name_list))) for j in range(0,len(img_file_name_list)-1): n=os.path.join("/content/drive/My Drive/test/"+SearchName[i]+"/",img_file_name_list[j]) img = cv2.imread(n) if img is None: print('image' + str(j) + ':NoImage') continue else: r,g,b = cv2.split(img) img = cv2.merge([r,g,b]) X_test.append(img) Y_test.append(i) X_train=np.array(X_train) X_test=np.array(X_test) y_train = to_categorical(Y_train) y_test = to_categorical(Y_test) model = Sequential() model.add(Conv2D(input_shape=input_shape, filters=32,kernel_size=(3, 3), strides=(1, 1), padding="same")) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(filters=32, kernel_size=(3, 3), strides=(1, 1), padding="same")) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(filters=32, kernel_size=(3, 3), strides=(1, 1), padding="same")) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Flatten()) model.add(Dense(256)) model.add(Activation("sigmoid")) model.add(Dense(128)) model.add(Activation('sigmoid')) # 分類したい人数を入れる model.add(Dense(len(SearchName))) model.add(Activation('softmax')) # コンパイル model.compile(optimizer='sgd', loss='categorical_crossentropy', metrics=['accuracy']) history = model.fit(X_train, y_train, batch_size=70, epochs=50, verbose=1, validation_data=(X_test, y_test)) # 汎化制度の評価・表示 score = model.evaluate(X_test, y_test, batch_size=32, verbose=0) print('validation loss:{0[0]}\nvalidation accuracy:{0[1]}'.format(score)) #acc, val_accのプロット} plt.plot(history.history["accuracy"], label="accuracy", ls="-", marker="o") plt.plot(history.history["val_accuracy"], label="val_accuracy", ls="-", marker="x") plt.ylabel("accuracy") plt.xlabel("epoch") plt.legend(loc="best") plt.show() #モデルを保存 model.save("MyModel.h5")

実行結果が以下になります。

Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount("/content/drive", force_remount=True). ['(12).jpg', '(1).jpg', '(0).jpg', '(15).jpg', '(14).jpg', '(13).jpg', '(8).jpg', '(6).jpg'] A:トレーニング用の写真の数は8枚です。 ['(18).jpg', '(13).jpg', '(12).jpg', '(1).jpg', '(0).jpg', '(7).jpg', '(23).jpg', '(22).jpg'] B:トレーニング用の写真の数は8枚です。 ['(15).jpg', '(11).jpg', '(10).jpg', '(1).jpg', '(3).jpg', '(19).jpg', '(18).jpg', '(17).jpg'] C:トレーニング用の写真の数は8枚です。 ['(23).jpg', '(21).jpg', '(18).jpg', '(17).jpg', '(16).jpg', '(8).jpg', '(4).jpg', '(3).jpg'] D:トレーニング用の写真の数は8枚です。 A:テスト用の写真の数は16枚です。 B:テスト用の写真の数は16枚です。 C:テスト用の写真の数は16枚です。 D:テスト用の写真の数は16枚です。 --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-2-12f67ddaedf6> in <module>() 106 107 history = model.fit(X_train, y_train, batch_size=70, --> 108 epochs=50, verbose=1, validation_data=(X_test, y_test)) 109 110 13 frames /usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/constant_op.py in convert_to_eager_tensor(value, ctx, dtype) 96 dtype = dtypes.as_dtype(dtype).as_datatype_enum 97 ctx.ensure_initialized() ---> 98 return ops.EagerTensor(value, ctx.device_name, dtype) 99 100 ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type numpy.ndarray).

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

CNNで学習するときの画像のサイズを設定(サイズが大きいと学習に時間がかかる)
ImgSize=(128,128)
input_shape=(128,128,3)

のinput_shapeが入力する画像サイズを指定している箇所になります。画像サイズを250×250にリサイズしていたので、128を250に帰ると無事実行できました。

投稿2020/08/27 08:27

編集2020/08/27 08:30
Keiti

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問