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

问题描述

我想伸出援手,因为我想更好地了解这个库的工作原理。我有一个大小约为 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,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)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)