Neural network 神经网络,未指定输入大小

Neural network 神经网络,未指定输入大小,neural-network,Neural Network,我目前正在尝试使用Sun数据集中的一些图像,它们的形状各不相同,大约为(10004001)。因为它们的形状是不同的,所以我的方法是创建一个包含numpy数组的numpy数组,这样我就不必定义它的任何形状。我想做的是用这些图片训练一个基本的CNN。问题是,我不认为我的CNN真正理解我的输入数据是如何定义的。在我的实现中,self.X_train[0]例如包含一个图像(self.Y_train[0]中有相应的目标,依此类推)。我现在的代码如下所示: import os from PIL import

我目前正在尝试使用Sun数据集中的一些图像,它们的形状各不相同,大约为(10004001)。因为它们的形状是不同的,所以我的方法是创建一个包含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)
这个问题有解决方案吗?如果有,有人能提供我应该遵循的信息或来源吗?提前谢谢