前提
pythonで画像データを用いた機械学習を実装しています.
クラス分けをしラベル付けされた画像を用いているのですが,その中のあるクラスの画像数が2枚または1枚しかないものがあります.
こちらの都合上,trainデータとtestデータの分割は手作業で行っていますのでこのクラスの画像をtrainデータとtestデータに分割すると,train:test → 2:0,1:0 というようにtestデータが0枚になってしまうケースがあります.
簡略化していますが,現在使用しているコードでは以下のようになっています.
python
1####以下はtestデータに対して行うものです#### 2height = 50 # 入力画像の縦のpx 3width = 200 # 入力画像の横のpx 4 5data = np.empty([0, width], dtype='uint8') # 各画像(numpy.ndarray)を格納する配列 6labels = np.empty([0, 1], dtype='uint8') # 各画像のラベルを格納する配列 7 8# すべての画像に対して以下の処理を繰り返す 9data = np.append(data, img, axis=0) # imgは各画像の多次元配列numpy.ndarray 10labels = np.append(labels, i) # iは各画像につけられたラベル
実現したいこと
そこで,testデータが0枚のクラスではimgは,画像のheight, widthの情報は持たせたまま空の配列を生成できるようにしたいのですが,どのように実現すればよいのかが分かりません.
試したこと
調べたところnp.empty()というもので空配列を作ることができ,testデータが0枚のクラスでは以下のように画像のheight, widthの情報を持たせた空配列をimgとして生成しましたが,なぜかimgの各要素には値が入っています.
そのためimgは一つの画像として生成されてしまうため,これを実現できません.
python
1img = np.empty([height, width], dtype='uint8') 2 3####imgの中身#### 4array([[1.39200593e-311, 1.39200483e-311, 2.12199579e-314, ..., 5 4.43181969e+025, 6.02669610e+175, 2.26070879e+271], 6 [7.79952706e-143, 1.35507324e+248, 4.11737758e-027, ..., 7 8.39833674e-095, 1.91081333e+214, 3.03435270e-086], 8 [9.45909065e-154, 2.16401696e-027, 6.01334514e-154, ..., 9 3.94655055e+180, 1.22841379e+169, 6.96742179e+252], 10 ..., 11 [9.45906221e-154, 2.16401696e-027, 6.01334514e-154, ..., 12 1.16312003e+253, 1.97453180e-153, 6.01346953e-154], 13 [8.42241166e+252, 4.96850937e+180, 5.02416738e+180, ..., 14 8.87693539e+252, 8.76391296e+252, 5.02049779e+276], 15 [5.12558197e-027, 6.01334514e-154, 1.71653323e+219, ..., 16 1.62607037e-086, 6.01334619e-154, 2.04918907e+214]])
現在はこちらの対処法がわからず,とりあえずはtestデータが0枚のところにはnp.zeros()で真っ黒の画像を一枚だけ生成し,train:test → 2:1,1:1といった風に対処しています.(これが正しいのかは分かりませんが...)
----まとめ----
・画像のheight, widthの情報を持たせた空の配列を生成することは可能かどうか.
・現在の真っ黒の画像で補完する方法に問題はないか.
また,機械学習で画像認識を行うとき,入力する画像(numpy.ndarray)とそれに対応するラベルがセットとなりますが今回のような場合でtestデータが0枚のところは,空の配列をappendするにも画像の縦横の長さの情報は持たせた方が機械学習の内部処理的にはいいのでしょうか.
それともただ単にimg = []としてappendしてしまっても問題ないのでしょうか.
併せてご回答いただけますとありがたいです.
よろしくお願いします.
補足情報(FW/ツールのバージョンなど)
ubuntu 20.04
Python 3.8.10
tensorflow-gpu 2.5.3
keras 2.8.0
numpy 1.19.5
jupyter lab 2.3.2
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー