问题描述
我想伸出援手,因为我想更好地了解这个库的工作原理。我有一个大小约为 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 (将#修改为@)