Keras TCN 数据集迭代器耗尽数据

时间:2021-02-26 15:52:29

标签: python tensorflow machine-learning keras conv-neural-network

我想伸出援手,因为我想更好地了解这个库的工作原理。我有一个大小约为 4690 的训练集,所有数组大小都不同(即数组 [1,x,8],其中“x”是随机时间步长)。使用下面的代码,我知道我只能有 epochs = # of training examples/# of batches。运行它,我遇到了一个错误:

您的数据集迭代器数据不足;中断训练。确保您的迭代器可以生成至少 steps_per_epoch * epochs 个批次(在本例中为 6570 个批次)。在构建数据集时,您可能需要使用 repeat() 函数。

这是预期的。根据我的理解,单个 epoch 包括对所有批次的每批数据进行向前/向后传递,并相应地更新权重。似乎上面的函数将一批的单个前向/后向补丁视为一个时期,实际上只是通过一部分样本而不是整个数据集运行它。

这是该函数的运行方式吗?在进入第二个纪元之前,有没有办法正确调整它以将一个纪元设置为所有 45 个批次(整个训练数据集)的前向/后向传递?或者这只是对具有不同输入长度的输入数据进行训练的性质。

对于 exchange_rate.txt 数据集 https://github.com/philipperemy/keras-tcn/tree/master/tasks/exchange_rate

代码:

#Generator Function
def train_vals(split_index=[0.75], timesteps=1000):

    random.seed(10)
    
    df = np.loadtxt('exchange_rate.txt', delimiter=',')

    n = len(df)
    folds = []

    
    a = 0
    for split_point in split_index:
        #Train End
        train_end = int(split_point * n)
        pika = 0
        for i in range(train_end - timesteps):         
            val = random.randrange(100,500)
            
      
            train_x = df[i:i + val]
            train_y = df[i + val]
          
            
            train_x = np.array(train_x)
            train_x = np.expand_dims(train_x, axis = 0)
            
            
            train_y = np.array(train_y)
            train_y = train_y.reshape((1,8))

            yield train_x, train_y


#Model
i = Input(batch_shape=(1, None, 8))


o = TCN(nb_filters = 64, kernel_size = 2, activation = 'relu', return_sequences = True )(i)
o = TCN(nb_filters = 256, kernel_size = 2, activation = 'relu', return_sequences = False )(o)
o = Dense(8, activation='linear')(o)




m = Model(inputs=[i], outputs=[o])
m.compile(optimizer='adam', loss='mse', metrics=['mae'])

size = 45
gen = train_vals(split_index=[0.75], timesteps=500)

m.fit_generator(gen, epochs=150, steps_per_epoch=size, max_queue_size=1)

0 个答案:

没有答案