[PYTHON] Konvertieren von (32,32,3) in einen 4-dimensionalen Tensor (1,32,32,1) mit ndarray-Typ

Der Anfang der Sache

Beim Python-Ndarray-Typ wurde es notwendig, (32,32,3) in einen 4-dimensionalen Tensor (1,32,32,1) umzuwandeln. Der Zweck ist das maschinelle Lernen von Daten.

4D Tensor

Ein Array vom Typ ndarray wie (1,32,32,1) wird als "vierdimensionaler Tensor" bezeichnet. Der Inhalt des Bildes, der von diesem 4-dimensionalen Tensor gelesen werden kann, ist (Anzahl der Bilder, Höhe des Bildes, Breite des Bildes, Anzahl der Bildkanäle). Die Anzahl der Kanäle im Bild bedeutet RGB in Graustufen bei 1 und in Farbe bei 3. Ein Bild wird durch ein Array vom Typ ndarray (32, 32, 3) dargestellt, und es kann beurteilt werden, dass es sich nicht um einen Bilddatensatz handelt.

Nachtrag) Wenn ich einer auf Mathematik spezialisierten Person sage, dass es sich um einen 4-dimensionalen Tensor handelt, scheint es, dass er in einem anderen Bild vermittelt wird, aber ich mag die Art und Weise, wie es heißt: "Wenn Sie es nicht zu einem 4-dimensionalen Tensordatensatz machen, können Sie ihn nicht in Keras verwenden." Ich benutze es oft (lacht)

Ich möchte ndarray in 4D-Tensor konvertieren

Ich denke, es ist ziemlich schwierig, den ndarray-Typ so zu konvertieren, wie Sie möchten. Vorerst habe ich bestätigt, dass der ndarray-Typ wie folgt konvertiert werden kann.

import numpy as np

a = np.arange(6)
a = a.reshape(2, 3)
print(a)
#↓ Ausgabeergebnis
#[[0 1 2]
# [3 4 5]]
print("===============\n")

a = a.reshape(2,3,1)
print(a)
#↓ Ausgabeergebnis
#[[[0]
#  [1]
#  [2]]
#
# [[3]
#  [4]
#  [5]]]
print("---------------\n")
a = a.reshape(1,2,3,1)
print(a)
#↓ Ausgabeergebnis
#[[[[0]
#   [1]
#   [2]]
#
#  [[3]
#   [4]
#   [5]]]]

Jetzt können Sie es in die Vorhersagefunktion unten setzen. y_pred = model.predict(x) Wenn Sie die Daten von (1, 32, 16, 1) nicht im ndarray-Typ für x eingeben, tritt ein Fehler auf. Auch bei (32, 16, 1) tritt ein Fehler auf.

Code

from PIL import Image
import numpy as np

# 3 *Wobei 2 eigentlich 32 ist*Bitte ersetzen Sie es durch 32 oder so.
c = np.arange(3 * 2)
c = c.reshape(3, 2)

pilImg = Image.fromarray(np.uint8(c))
# pilImg_1 = pilImg.convert("RGB")
pilImg_1 = pilImg.convert("L")
data = np.array(pilImg_1, dtype='int64')
print(type(data))
print(data)
print(data.shape)

a = data
print("===============\n")

a = a.reshape(3,2,1)
print(a)

print("===============\n")

a = data.reshape(1,3,2,1)
print(a)

Konvertieren von (32,32,3) in (32,32) mit ndarray-Typ

Es ist ein Bonus. Es wird verwendet, wenn Sie das Bild von RGB in Graustufen ändern möchten. Ich weiß nicht, wie viel Nachfrage es gibt.

from PIL import Image
import numpy as np


file = "neko.png "
image = Image.open(file)
image = image.convert("RGB")
data_rgb = np.array(image, dtype='int64')          

#Weil es rgb ist(height, width, 3)Wird ein Array sein
print(type(data_rgb))
print("data_rgb ... " + str(data_rgb.shape))

pilImg_rgb = Image.fromarray(np.uint8(data_rgb))
pilImg_gray = pilImg_rgb.convert("L")
data_gray = np.array(pilImg_gray, dtype='int64') 

#Weil es Graustufen sind(height, width)Wird ein Array sein
print(type(data_gray))
print("data_gray ... " + str(data_gray.shape))

# 
pilImg_rgb_2 = Image.fromarray(np.uint8(data_gray))
pilImg_rgb_2 = pilImg_rgb_2.convert("RGB")
data_rgb_2 = np.array(pilImg_rgb_2, dtype='int64') 

#Ich habe es also wieder in rgb konvertiert(height, width, 3)Wird ein Array sein
print(type(data_rgb_2))
print("data_rgb ... " + str(data_rgb_2.shape))

Wenn Sie also (Höhe, Breite) ⇔ (Höhe, Breite, 3) tun, war dies ein Beispiel dafür. Es wird ein Array von (Höhe, Breite) anstelle von (Höhe, Breite, 1) sein.

Lesen Sie das Bild und konvertieren Sie es in (1, Höhe, Breite, Anzahl der Kanäle im Bild)

P.S. Es wurde schlecht geschrieben. Immerhin denke ich, dass der folgende Code ausreicht.

from PIL import Image
import numpy as np


file = "neko.png "
image = Image.open(file)
image = image.convert("RGB")
data_rgb = np.array(image, dtype='int64')          


#Weil es rgb ist(height, width, 3)Wird ein Array sein
print(type(data_rgb))
print("data_rgb ... " + str(data_rgb.shape))

pilImg_rgb = Image.fromarray(np.uint8(data_rgb))
pilImg_gray = pilImg_rgb.convert("L")
data_gray = np.array(pilImg_gray, dtype='int64') 

#Weil es Graustufen sind(height, width)Wird ein Array sein
print(type(data_gray))
print("data_gray ... " + str(data_gray.shape))

#Weil es Graustufen sind(height, width)Wird ein Array sein
print(type(data_gray))
print("data_gray ... " + str(data_gray.shape))

a = data_gray.reshape(1, image.height, image.width, 1)
print(a.shape)

#Ausführungsergebnis
# <class 'numpy.ndarray'>
# data_rgb ... (210, 160, 3)
# <class 'numpy.ndarray'>
# data_gray ... (210, 160)
# (1, 210, 160, 1)

Die Sequenz ist (1, 210, 160, 1), also dieselbe wie (1, 32, 32, 1). Jetzt können Sie es verwenden, um maschinelles Lernen vorherzusagen. Da Sie jedoch normalerweise ein Farbbild verwenden, ist das Ende 3 anstelle von 1. Wenn Sie Buchstaben usw. lernen möchten, können Sie Graustufen verwenden. Ich denke, Sie können das Beispiel dieses Artikels verwenden.

Nachtrag) Jetzt geht es mir gut und ich arbeite.

Konvertieren Sie ein Array von (1, 32, 32, 3) in (32, 32, 3).

print("img ... " + str(img.shape))
# img ... (1, 32, 32, 3)
print("img ..." + str(img[0].shape))
# img ... (32, 32, 3)

imwrite(img_path, img)
#↑ Dies ist ein Fehler
imwrite(img_path, img[0])
#↑ Das ist ein Erfolg

Recommended Posts

Konvertieren von (32,32,3) in einen 4-dimensionalen Tensor (1,32,32,1) mit ndarray-Typ
[Python] So konvertieren Sie eine zweidimensionale Liste in eine eindimensionale Liste
Konvertieren Sie 202003 bis 2020-03 mit Pandas
So konvertieren / wiederherstellen Sie einen String mit [] in Python
So konvertieren Sie den Python # -Typ für Super-Anfänger von Python: str
0 Konvertieren Sie nicht ausgefülltes Datum in Datums- / Uhrzeittyp mit regulärem Ausdruck
So konvertieren Sie horizontal gehaltene Daten mit Pandas in vertikal gehaltene Daten
So konvertieren Sie ein Klassenobjekt mit SQLAlchemy in ein Wörterbuch
So konvertieren Sie eine JSON-Datei mit Python Pandas in eine CSV-Datei
[Python] So erstellen Sie mit Matplotlib ein zweidimensionales Histogramm
Wie aktualisiere ich mit SQLAlchemy?
Wie mit SQLAlchemy ändern?
So trennen Sie Zeichenfolgen mit ','
Wie lösche ich mit SQLAlchemy?
So konvertieren Sie mit Python [Anwendung] von einem Array in ein Wörterbuch
So konvertieren Sie den Python # -Typ für Python-Superanfänger: int, float
Konvertieren Sie .ipynb in .html (mit BatchFile)
So brechen Sie RT mit tweepy ab
Python: So verwenden Sie Async mit
So verwenden Sie virtualenv mit PowerShell
Konvertieren Sie die Liste mit Python in DataFrame
Konvertieren Sie Sätze mit gensim in Vektoren
So konvertieren Sie 0,5 in 1056964608 auf einmal
Wie fange ich mit Scrapy an?
Umgang mit dem DistributionNotFound-Fehler
Wie fange ich mit Django an?
Aufblasen von Daten (Datenerweiterung) mit PyTorch
So berechnen Sie das Datum mit Python
So konvertieren Sie von .mgz nach .nii.gz
So installieren Sie den MySQL-Connector mit pip3
Konvertieren Sie PDF in Image mit ImageMagick
So verbinden Sie INNER mit SQL Alchemy
So installieren Sie Anaconda mit pyenv
Anzeigen von Legendenmarkierungen in einem mit Python 2D-Plot
So führen Sie eine arithmetische Verarbeitung mit der Django-Vorlage durch
[Blender] So legen Sie shape_key mit dem Skript fest
[Python] So konvertieren Sie eine Datenbankdatei in CSV
Wie man mit matplotlib mehrere Figuren betitelt
Konvertieren Sie Memos sofort mit Python 2to3
So erhalten Sie die Eltern-ID mit sqlalchemy
[Django] Abfragesatz konvertieren, um Typliste zu diktieren
So konvertieren Sie csv in tsv in CLI
Konvertieren Sie mit pdfplumber von PDF in CSV
So installieren Sie DLIB mit aktiviertem 2020 / CUDA
Verwendung von ManyToManyField mit Djangos Admin
Verwendung von OpenVPN mit Ubuntu 18.04.3 LTS
Verwendung von Cmder mit PyCharm (Windows)
Konvertieren Sie Zeichenketten mit RoBERTa in Merkmalsmengen
Konvertieren Sie Excel-Daten mit Python in JSON
Konvertiere Hiragana mit Python (Beta) in Romaji
So verhindern Sie Paketaktualisierungen mit apt
So arbeiten Sie mit BigQuery in Python
Wie man Ass / Alembic mit HtoA benutzt
Umgang mit Enum-Kompatibilitätsfehlern
Verwendung von Japanisch mit NLTK-Plot