Python Keras fit_生成器将图像大小作为批处理大小
我正试图在tusimple基准上培训我的enet实现。对于 这个任务我已经编写了一个生成器(继承自keras.utils.Sequence) 但当我开始训练模型时,keras总是将图像的高度作为批量大小 我已经为其他数据集编写了一个类似的生成器,并且没有这个问题,尽管两者的输出DIM是相同的 编辑:我在生成器代码中发现了一些错误并修复了它们,但它们仍在下面的代码中,但是它们不会影响批量大小的问题Python Keras fit_生成器将图像大小作为批处理大小,python,keras,generator,Python,Keras,Generator,我正试图在tusimple基准上培训我的enet实现。对于 这个任务我已经编写了一个生成器(继承自keras.utils.Sequence) 但当我开始训练模型时,keras总是将图像的高度作为批量大小 我已经为其他数据集编写了一个类似的生成器,并且没有这个问题,尽管两者的输出DIM是相同的 编辑:我在生成器代码中发现了一些错误并修复了它们,但它们仍在下面的代码中,但是它们不会影响批量大小的问题 import tensorflow as tf import json import numpy a
import tensorflow as tf
import json
import numpy as np
import cv2
class tusimple_gen(tf.keras.utils.Sequence):
def __init__(self, batch_size,shape=(720,1280), filepath='../culane/', start=0, end=1):
self.batch_size = batch_size
self.filepath = filepath
self.json = [json.loads(line) for line in open(self.filepath+'label_data_0313.json')]
s = int(start*len(self.json))
e = int(end*len(self.json))
self.json = self.json[s:e]
self.shape = shape
def __len__(self):
return len(self.json) // self.batch_size
def get_item(self, idx):
gt = self.json[idx]
gt_lanes = gt['lanes']
y_samples = gt['h_samples']
raw_file = self.filepath + gt['raw_file']
x = cv2.imread(raw_file, -1)
x = x/255
gt_lanes_vis = [[(x,y) for (x,y) in zip(lane,y_samples) if x>=0] for lane in gt_lanes]
y = np.zeros((x.shape[0],x.shape[1],5))
y_5 = np.ones((x.shape[0],x.shape[1]))
y[:,:,4] = y_5
for i,lane in enumerate(gt_lanes_vis):
lane_im = cv2.polylines(np.zeros_like(y[:,:,0]), np.int32([lane]), isClosed=False, color=(255,255,255), thickness=10)
y[:,:,i] = lane_im
y[:,:,4] = y[:,:,4] - lane_im
if self.shape[:2] != x.shape[:2]:
x = cv2.resize(x,(self.shape[1],self.shape[0] ))
y = cv2.resize(y,(self.shape[1],self.shape[0] ))
return (x,y)
def __getitem__(self, idx):
x_ret = np.zeros((self.batch_size, self.shape[0],self.shape[1],3))
y_ret = np.zeros((self.batch_size, self.shape[0],self.shape[1],5))
for i in range(self.batch_size):
x,y = self.get_item(i)
x_ret[i,:,:,:] = x
y_ret[i,:,:,:] = y
return (x_ret,y_ret)
实际培训代码:
WIDTH = 1280//2
HEIGHT = 720//2
gen_train = tusimple_gen(batch_size=1,shape=(HEIGHT,WIDTH),start=0,end=0.8)
gen_val = tusimple_gen(batch_size=1,shape=(HEIGHT,WIDTH),start=0.8,end=1)
training_history = model.fit_generator(
generator=gen_train,
epochs=40,
verbose=1,
validation_data=gen_val,
validation_steps=len(gen_val),
callbacks=[tensorboard_callback],
shuffle=True
)
fit_生成器()的输出
模型呢?你能提供代码吗?如果这不是Keras的错误,那么问题可能就在那里。你怎么知道它是使用img_大小作为批量大小?你可能总共有450个样本,其中80%的样本用于训练,其余90个样本用于验证。模型可能会重复吗?你能提供代码吗?如果这不是Keras的错误,那么问题可能就在那里。你怎么知道它是使用img_大小作为批次大小?你可能总共有450个样本,其中80%的样本用于训练,其余90个样本用于验证。可能是重复的
WARNING:tensorflow:Model failed to serialize as JSON. Ignoring... Layers with arguments in `__init__` must override `get_config`.
Epoch 1/40
31/360 [=>............................] - ETA: 1:47 - loss: -111.2384 - acc: 0.9998 - dice_coef: 0.9694 - iou_loss_core: 0.9380