Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras fit_生成器将图像大小作为批处理大小_Python_Keras_Generator - Fatal编程技术网

Python Keras fit_生成器将图像大小作为批处理大小

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

我正试图在tusimple基准上培训我的enet实现。对于 这个任务我已经编写了一个生成器(继承自keras.utils.Sequence)

但当我开始训练模型时,keras总是将图像的高度作为批量大小

我已经为其他数据集编写了一个类似的生成器,并且没有这个问题,尽管两者的输出DIM是相同的

编辑:我在生成器代码中发现了一些错误并修复了它们,但它们仍在下面的代码中,但是它们不会影响批量大小的问题

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