无法用自己的数据集训练 Unet

时间:2021-01-31 12:50:01

标签: python tensorflow keras

我在用我自己的数据集(Cityscape 数据集)训练这个 unet 架构时遇到了一些问题。我的数据集由 1024x2048 图像组成,它们对应于多个类别的基本事实。因此,我的图像的形状是 1024x2048x3,我的地面实况的形状也是 1024x2048x3。执行我的代码后,我得到: ValueError: 没有为任何变量提供梯度。提前致谢^^

(我刚刚尝试了前 10 张图片)

代码:

from keras.layers.core import Dropout
from keras.layers.convolutional import Conv2D, Conv2DTranspose
from keras.layers.pooling import MaxPooling2D
from keras.layers import Input
from keras.models import Model
from keras.layers.merge import concatenate
import pickle
import numpy as np

inputs = Input((1024, 2048, 3))

c1 = Conv2D(16, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same')(inputs)
c1 = Dropout(0.1)(c1)
c1 = Conv2D(16, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same')(c1)
p1 = MaxPooling2D((2, 2))(c1)

c2 = Conv2D(32, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same')(p1)
c2 = Dropout(0.1)(c2)
c2 = Conv2D(32, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same')(c2)
p2 = MaxPooling2D((2, 2))(c2)

c3 = Conv2D(64, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same')(p2)
c3 = Dropout(0.2)(c3)
c3 = Conv2D(64, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same')(c3)
p3 = MaxPooling2D((2, 2))(c3)

c4 = Conv2D(128, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same')(p3)
c4 = Dropout(0.2)(c4)
c4 = Conv2D(128, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same')(c4)
p4 = MaxPooling2D(pool_size=(2, 2))(c4)

c5 = Conv2D(256, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same')(p4)
c5 = Dropout(0.3)(c5)
c5 = Conv2D(256, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same')(c5)

u6 = Conv2DTranspose(128, (2, 2), strides=(2, 2), padding='same')(c5)
u6 = concatenate([u6, c4])
c6 = Conv2D(128, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same')(u6)
c6 = Dropout(0.2)(c6)
c6 = Conv2D(128, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same')(c6)

u7 = Conv2DTranspose(64, (2, 2), strides=(2, 2), padding='same')(c6)
u7 = concatenate([u7, c3])
c7 = Conv2D(64, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same')(u7)
c7 = Dropout(0.2)(c7)
c7 = Conv2D(64, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same')(c7)

u8 = Conv2DTranspose(32, (2, 2), strides=(2, 2), padding='same')(c7)
u8 = concatenate([u8, c2])
c8 = Conv2D(32, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same')(u8)
c8 = Dropout(0.1)(c8)
c8 = Conv2D(32, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same')(c8)

u9 = Conv2DTranspose(16, (2, 2), strides=(2, 2), padding='same')(c8)
u9 = concatenate([u9, c1], axis=3)
c9 = Conv2D(16, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same')(u9)
c9 = Dropout(0.1)(c9)
c9 = Conv2D(16, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same')(c9)

outputs = Conv2D(1, (1, 1), activation='sigmoid')(c9)

model = Model(inputs=[inputs], outputs=[outputs])
model.compile(optimizer='adam')
model.summary()

with open ('imagesCityscape', 'rb') as fp:
    images = np.array(pickle.load(fp))
    
with open ('groundTruthCityscape', 'rb') as fp:
    groundTruth = np.array(pickle.load(fp))

trainX = images[:10,:,:,:]
trainY = groundTruth[:10,:,:,:]

history = model.fit(trainX, trainY, epochs=5)

我得到的错误如下: 时代1/5 回溯(最近一次调用):

文件“D:\UPNA\Proyecto\Code\model.py”,第 75 行,在 历史 = model.fit(trainX, trainY, epochs=5)

文件“C:\Users\ivrin\anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py”,第 1100 行,适合 tmp_logs = self.train_function(iterator)

文件“C:\Users\ivrin\anaconda3\lib\site-packages\tensorflow\python\eager\def_function.py”,第 828 行,调用 结果 = self._call(*args, **kwds)

文件“C:\Users\ivrin\anaconda3\lib\site-packages\tensorflow\python\eager\def_function.py”,第 871 行,在 _call self._initialize(args, kwds, add_initializers_to=initializers)

文件“C:\Users\ivrin\anaconda3\lib\site-packages\tensorflow\python\eager\def_function.py”,第 725 行,在 _initialize self._stateful_fn._get_concrete_function_internal_garbage_collected(#pylint: disable=protected-access

文件“C:\Users\ivrin\anaconda3\lib\site-packages\tensorflow\python\eager\function.py”,第 2969 行,在 _get_concrete_function_internal_garbage_collected graph_function, _ = self._maybe_define_function(args, kwargs)

文件“C:\Users\ivrin\anaconda3\lib\site-packages\tensorflow\python\eager\function.py”,第 3361 行,在 _maybe_define_function graph_function = self._create_graph_function(args, kwargs)

文件“C:\Users\ivrin\anaconda3\lib\site-packages\tensorflow\python\eager\function.py”,第 3196 行,在 _create_graph_function 中 func_graph_module.func_graph_from_py_func(

文件“C:\Users\ivrin\anaconda3\lib\site-packages\tensorflow\python\framework\func_graph.py”,第 990 行,在 func_graph_from_py_func func_outputs = python_func(*func_args, **func_kwargs)

文件“C:\Users\ivrin\anaconda3\lib\site-packages\tensorflow\python\eager\def_function.py”,第 634 行,在wrapped_fn 中 out = weak_wrapped_fn().包裹(*args, **kwds)

文件“C:\Users\ivrin\anaconda3\lib\site-packages\tensorflow\python\framework\func_graph.py”,第 977 行,在包装器中 引发 e.ag_error_metadata.to_exception(e)

值错误:在用户代码中:

C:\Users\ivrin\anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py:805 train_function  *
    return step_function(self, iterator)
C:\Users\ivrin\anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py:795 step_function  **
    outputs = model.distribute_strategy.run(run_step, args=(data,))
C:\Users\ivrin\anaconda3\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:1259 run
    return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
C:\Users\ivrin\anaconda3\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2730 call_for_each_replica
    return self._call_for_each_replica(fn, args, kwargs)
C:\Users\ivrin\anaconda3\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:3417 _call_for_each_replica
    return fn(*args, **kwargs)
C:\Users\ivrin\anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py:788 run_step  **
    outputs = model.train_step(data)
C:\Users\ivrin\anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py:757 train_step
    self.optimizer.minimize(loss, self.trainable_variables, tape=tape)
C:\Users\ivrin\anaconda3\lib\site-packages\tensorflow\python\keras\optimizer_v2\optimizer_v2.py:498 minimize
    return self.apply_gradients(grads_and_vars, name=name)
C:\Users\ivrin\anaconda3\lib\site-packages\tensorflow\python\keras\optimizer_v2\optimizer_v2.py:598 apply_gradients
    grads_and_vars = optimizer_utils.filter_empty_gradients(grads_and_vars)
C:\Users\ivrin\anaconda3\lib\site-packages\tensorflow\python\keras\optimizer_v2\utils.py:78 filter_empty_gradients
    raise ValueError("No gradients provided for any variable: %s." %

ValueError: No gradients provided for any variable: ['conv2d_38/kernel:0', 'conv2d_38/bias:0', 'conv2d_39/kernel:0', 'conv2d_39/bias:0', 'conv2d_40/kernel:0', 'conv2d_40/bias:0', 'conv2d_41/kernel:0', 'conv2d_41/bias:0', 'conv2d_42/kernel:0', 'conv2d_42/bias:0', 'conv2d_43/kernel:0', 'conv2d_43/bias:0', 'conv2d_44/kernel:0', 'conv2d_44/bias:0', 'conv2d_45/kernel:0', 'conv2d_45/bias:0', 'conv2d_46/kernel:0', 'conv2d_46/bias:0', 'conv2d_47/kernel:0', 'conv2d_47/bias:0', 'conv2d_transpose_8/kernel:0', 'conv2d_transpose_8/bias:0', 'conv2d_48/kernel:0', 'conv2d_48/bias:0', 'conv2d_49/kernel:0', 'conv2d_49/bias:0', 'conv2d_transpose_9/kernel:0', 'conv2d_transpose_9/bias:0', 'conv2d_50/kernel:0', 'conv2d_50/bias:0', 'conv2d_51/kernel:0', 'conv2d_51/bias:0', 'conv2d_transpose_10/kernel:0', 'conv2d_transpose_10/bias:0', 'conv2d_52/kernel:0', 'conv2d_52/bias:0', 'conv2d_53/kernel:0', 'conv2d_53/bias:0', 'conv2d_transpose_11/kernel:0', 'conv2d_transpose_11/bias:0', 'conv2d_54/kernel:0', 'conv2d_54/bias:0', 'conv2d_55/kernel:0', 'conv2d_55/bias:0', 'conv2d_56/kernel:0', 'conv2d_56/bias:0'].

0 个答案:

没有答案