#neural-network
#нейронная сеть
Вопрос:
В настоящее время я пытаюсь использовать некоторые изображения из набора данных Sun различной формы, около (1000, 400, 1). Поскольку они различаются по форме, мой подход к этому заключался в создании массива numpy с массивами numpy в нем, чтобы мне не нужно было определять какую-либо его форму. Что я хочу сделать, так это обучить базовый CNN с использованием этих изображений. Проблема в том, что я не думаю, что мой CNN понимает, как на самом деле определяются мои входные данные. В моей реализации self.X_train[0], например, содержит одно изображение (с соответствующей целью в self.Y_train[0] и так далее). Мой код прямо сейчас выглядит как:
import os
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense, Conv2D, Flatten
class network:
def __init__(self):
self.X_train, self.Y_train = self.generate_targets()
def generate_targets(self):
path = 'C:\Users\joaki\PycharmProjects\project\project dl\'
folder = os.fsencode(path)
targets = []
inputs = []
for file in os.listdir(folder):
filename = os.fsdecode(file)
if filename.endswith(('.jpg')):
img = Image.open(filename).convert('RGB')
img2 = Image.open(filename).convert('L')
arr2 = np.array(img2)
arr2 = arr2.reshape((arr2.shape[0], arr2.shape[1], 1))
inputs.append(arr2)
arr = np.array(img)
targets.append(arr)
Y = np.array(targets)
X = np.array(inputs)
return X, Y
def plotting(self, type):
plt.figure(figsize=(20, 10))
for i in range(self.X_train.shape[0]):
plt.subplot(2, 2, i 1)
if type == 'targets':
lum_img = self.Y_train[i][:, :, :] #[:,:,:] för färg
plt.imshow(lum_img)
if type == 'inputs':
lum_img = self.X_train[i][:, :, 0] # [:,:,:] för färg
plt.imshow(lum_img)
plt.show()
def train_network(self):
model = Sequential()
# add model layers
model.add(Conv2D(64, kernel_size=3, activation='relu', input_shape = (None, None, 1)))
model.add(Conv2D(32, kernel_size=3, activation='relu'))
model.add(Flatten())
model.add(Dense(10, activation='softmax'))
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(self.X_train, self.Y_train, batch_size = 1, validation_data=(self.X_train, self.Y_train), epochs=3)
network1 = network()
#network1.plotting('inputs')
network1.train_network()
#print(network1.X_train[0].shape)
Есть ли решение этой проблемы, если да, может ли кто-нибудь предоставить информацию или источник, которому я должен следовать? Заранее спасибо!