Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 一维CNN的输入高度必须恒定吗?_Python 3.x_Keras_Conv Neural Network_Recurrent Neural Network - Fatal编程技术网

Python 3.x 一维CNN的输入高度必须恒定吗?

Python 3.x 一维CNN的输入高度必须恒定吗?,python-3.x,keras,conv-neural-network,recurrent-neural-network,Python 3.x,Keras,Conv Neural Network,Recurrent Neural Network,我目前正在做在线/动态签名验证的荣誉研究项目。我正在使用SVC 2004数据集(任务2)。我已完成以下数据处理: def load_dataset_normalized(path): file_names = os.listdir(path) num_of_persons = len(file_names) initial_starting_point = np.zeros(np.shape([7])) x_dataset = [] y_dataset = [] for infile i

我目前正在做在线/动态签名验证的荣誉研究项目。我正在使用SVC 2004数据集(任务2)。我已完成以下数据处理:

def load_dataset_normalized(path):
file_names = os.listdir(path)

num_of_persons = len(file_names)

initial_starting_point = np.zeros(np.shape([7]))

x_dataset = []
y_dataset = []

for infile in file_names:
    full_file_name = os.path.join(path, infile)
    file = open(full_file_name, "r")
    file_lines = file.readlines()

    num_of_points = int(file_lines[0])

    x = []
    y = []
    time_stamp = []
    button_status = []
    azimuth_angles = []
    altitude = []
    pressure = []

    for idx, line in enumerate(file_lines[1:]):
        idx+=1
        nums = line.split(' ')

        if idx == 1:
            nums[2] = 0
            initial_starting_point = nums

            x.append(int(nums[0]))
            y.append(int(nums[1]))
            time_stamp.append(0)
            button_status.append(int(nums[3]))
            azimuth_angles.append(int(nums[4]))
            altitude.append(int(nums[5]))
            pressure.append(int(nums[6]))

        else:
            x.append(int(nums[0]))
            y.append(int(nums[1]))
            time_stamp.append(10)
            button_status.append(int(nums[3]))
            azimuth_angles.append(int(nums[4]))
            altitude.append(int(nums[5]))
            pressure.append(int(nums[6]))

    max_x = max(x)
    max_y = max(y)
    max_azimuth_angle = max(azimuth_angles)
    max_altitude = max(altitude)
    max_pressure = max(pressure)

    min_x = min(x)
    min_y = min(y)
    min_azimuth_angle = min(azimuth_angles)
    min_altitude = min(altitude)
    min_pressure = min(pressure)

    #Alignment normalization:
    for i in range(num_of_points):
        x[i] -= int(initial_starting_point[0])
        y[i] -= int(initial_starting_point[1])
        azimuth_angles[i] -= int(initial_starting_point[4])
        altitude[i] -= int(initial_starting_point[5])
        pressure[i] -= int(initial_starting_point[6])

    #Size normalization
    for i in range(num_of_points):
        x[i] = ((x[i] - max_x) / (min_x - max_x))
        y[i] = ((y[i] - max_y) / (min_y - max_y))
        azimuth_angles[i] = ((azimuth_angles[i] - max_azimuth_angle) / (min_azimuth_angle - max_azimuth_angle))
        altitude[i] = ((altitude[i] - max_altitude) / (min_altitude - max_altitude))
        pressure[i] = ((pressure[i] - max_pressure) / (min_pressure - max_pressure))

    #data points to dataset
    x_line = []
    for i in range (num_of_points):
        x_line.append([x[i], y[i], time_stamp[i], button_status[i], azimuth_angles[i], altitude[i], pressure[i]])

        if i == num_of_points-1:
            x_dataset.append(x_line)

    infile_without_extension = infile.replace('.TXT','')
    index_of_s = infile_without_extension.find("S")
    index_of_num = index_of_s + 1
    sig_ID = int(infile_without_extension[index_of_num:])
    if sig_ID < 21:
        y_dataset.append([1,0])
    else:
        y_dataset.append([0,1])

x_dataset = np.asarray(x_dataset)
y_dataset = np.asarray(y_dataset)
return x_dataset, y_dataset
这里是我遇到的问题:用于存储每个签名的点数不同,因此使得输入矩阵的输入高度随着签名的不同而不同。我现在必须强制数据集具有统一/恒定的点数吗


非常感谢您的时间。

在许多问题中,您都可以通过填充来解决问题。找到每个批次(或每个数据集)的最大输入节点数,并将较小的输入填充到该值。通常,填充的值为零,因此它实际上不会“训练”——但加权填充可能是一个问题。我通常使用PyTorch,但我认为Keras也有一个零填充层。关于你的第二个问题:是的,它可以是“有效的”。但最好用实际的代码和错误跟踪询问另一个问题。
class crnn_model:
def __init__(self, trainX, trainy, testX, testy, optimizer_method):
    self.trainX = trainX
    self.trainy = trainy
    self.testX = testX
    self.testy = testy

    self.evaluate_model(optimizer_method)

def evaluate_model(self, optimizer_method):
    verbose, epochs, batch_size = 0, 40, 10
    n_timesteps, n_features, n_outputs = len(self.trainX), 7, 2
    print(n_timesteps)
    model = keras.Sequential()
    model.add(keras.layers.Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(n_timesteps, n_features), use_bias=True))
    model.add(keras.layers.Conv1D(filters=64, kernel_size=3, activation='relu'))
    model.add(keras.layers.Dropout(0.5))
    model.add(keras.layers.MaxPooling1D(pool_size=2))
    model.add(keras.layers.Flatten())
    model.add(keras.layers.LSTM(2, input_shape=[30592,1], return_sequences=True))
    model.summary()

    # Compile the model
    model.compile(optimizer=optimizer_method, loss='categorical_crossentropy', metrics=['accuracy'])

    #fit model
    model.fit(self.trainX, self.trainy, epochs=epochs, batch_size=batch_size, verbose=verbose)

    # evaluate model
    _, accuracy = model.evaluate(self.testX, self.testy, batch_size=batch_size, verbose=0)
    return accuracy