培训Keras的验证

时间:2020-05-07 17:43:36

标签: python tensorflow keras lstm

我一般对Keras和机器学习都是陌生的,并且正在训练像这样的模型:

history = model.fit_generator(flight_generator(train_files_train, 4), steps_per_epoch=500, epochs=50)

flight_generator是用于准备训练数据并对其进行格式化,然后将其返回给模型以进行拟合的函数。这很好用,所以现在我想添加一些验证,在网上看了很多之后,我仍然不知道如何实现它。

我最好的猜测是:

history = model.fit_generator(flight_generator(train_files_train, 4), steps_per_epoch=500, epochs=50, validation_data=flight_generator(train_files_cv, 4))

但是,当我运行代码时,它只会在第一个时期冻结。我想念什么?

编辑:

flight_generator的代码:

def flight_generator(files, batch_size):

    while True:
          batch_inputs  = numpy.random.choice(a    = files, 
                                          size = batch_size)
          batch_input_X = []
          batch_input_Y = []
          c=0
          for batch_input in batch_inputs:
            # reshape into X=t and Y=t+1
            trainX, trainY = create_dataset(batch_input, look_back)
            # reshape input to be [samples, time steps, features]
            trainX = numpy.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))

            if c is 0:
              batch_input_X = trainX
              batch_input_Y = trainY

            else:
              batch_input_X = numpy.concatenate((batch_input_X, trainX), axis = 0)
              batch_input_Y = numpy.concatenate((batch_input_Y, trainY), axis = 0)

            c += 1


          # Return a tuple of (input) to feed the network

          batch_x = numpy.array( batch_input_X )
          batch_y = numpy.array( batch_input_Y )


          yield(batch_x, batch_y)

1 个答案:

答案 0 :(得分:0)

您的validation_data应该采用元组格式。所以您应该尝试更改它:

history = model.fit_generator(flight_generator(train_files_train, 4), steps_per_epoch=500, epochs=50,batch_size=32,validation_data=(flight_generator(train_files_cv, 4)))