微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何解决问题 ValueError: logits and labels must have the same shape ((None, 388, 388, 1) vs (None, 572, 572, 1))?

如何解决如何解决问题 ValueError: logits and labels must have the same shape ((None, 388, 388, 1) vs (None, 572, 572, 1))?

Error Error Description

我使用 TensorFlow 2.2 来实现 Unet。 这是我正在构建的代码,它给了我 logits vs labels 的错误。已附上错误图片

**imports**
import numpy as np
import os
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

**Double Conv**
class Down(layers.Layer):
  def __init__(self,channels):
    super(Down,self).__init__()
    self.conv1 = layers.Conv2D(channels,(3,3),padding='valid',activation='relu')
    self.conv2 = layers.Conv2D(channels,activation='relu')
    

  def call(self,input_tensor,training=False):
    x = self.conv1(input_tensor,training=training)
    x = self.conv2(x,training=training)
    

    return x
**crop tensor**
def crp_img(tensor,target):
  x = tensor.get_shape().as_list()
  t_h = x[1]
  y = target.get_shape().as_list()
  tg_h= y[1]
  delta = t_h - tg_h 
  delta = delta // 2 
  #target = tf.image.resize_with_pad(target,t_h,t_w)

  return tensor[:,delta:t_h-delta,:] 

**Unet**
class U_net(keras.Model):
  def __init__(self):
    super(U_net,self).__init__()
    self.down1 = Down(64)
    self.down2 = Down(128)
    self.down3 = Down(256)
    self.down4 = Down(512)
    self.down5 = Down(1024)
    self.pool  = layers.MaxPooling2D((2,2),2)
    self.cv_T1= layers.Conv2DTranspose(512,(2,strides=(2,2))
    self.cv_T2 = layers.Conv2DTranspose(256,2))
    self.cv_T3 = layers.Conv2DTranspose(128,2))
    self.cv_T4 = layers.Conv2DTranspose(64,2))
    self.up1 = Down(512)
    self.up2 = Down(256)
    self.up3 = Down(128)
    self.up4 = Down(64)


  def call(self,training=False):
    d1 = self.down1(input_tensor,training=training)#
    x1 = self.pool(d1)
    print("Down_1 ",x1.shape)
    d2 = self.down2(x1,training=training)#
    x2 = self.pool(d2)
    print("Down_2 ",x2.shape)
    d3 = self.down3(x2,training=training)#
    x3 = self.pool(d3)
    print("Down_3 ",x3.shape)
    d4 = self.down4(x3,training=training)#
    x4 = self.pool(d4)
    print("Down_4 ",x4.shape)
    x5 = self.down5(x4,training=training)
    #mid = layers.Conv2D(1024,padding='same',activation='relu')(x4)
    print("Down_5 ",x5.shape)
    
    up_1 = self.cv_T1(x5)
    y_1 = crp_img(d4,up_1)
    x_11 = layers.concatenate([up_1,y_1])
    #print(x_11.shape)
    up = self.up1(x_11)
    print(up.shape)
    
    up_2 = self.cv_T2(up)
    y_2 = crp_img(d3,up_2)
    x_22 = layers.concatenate([up_2,y_2])
    #rint(x_22.shape)
    up_c = self.up2(x_22)

    print(up_c.shape)

    up_3 = self.cv_T3(up_c)
    print(up_3.shape)
    #up_3 = self.cv_T3(up_c)
    y_3 = crp_img(d2,up_3)
    #print(y_3.shape)
    x_33 = layers.concatenate([up_3,y_3])
    up_x = self.up3(x_33)
    print(up_x.shape)


    up_4 = self.cv_T4(up_x)
    y_4 = crp_img(d1,up_4)
    x_44 = layers.concatenate([up_4,y_4])
    #print(x_44.shape)
    up_z = self.up4(x_44)
   # print(up_z.shape)


    print(up_z.shape)
    #print(conv_x.shape)
    
    z = layers.Conv2D(1,(1,1),activation='sigmoid')(up_z)
    print(z.shape)
    return z
  
  def model(self):
    x = keras.Input(shape=(None,None,3))
    return keras.Model(inputs=[x],outputs=self.call(x))

**Model Call and Training**
model = U_net()
model.compile(optimizer=keras.optimizers.Adam(lr=0.001),loss=keras.losses.BinaryCrossentropy(from_logits=False),metrics=["accuracy"])
model.fit(train_set,epochs=epochs,steps_per_epoch=len(train_images)//bs,verbose=1)

当我尝试训练上述模型时,会产生 logits 与标签错误 ValueError:logits 和标签必须具有相同的形状 ((None,388,1) vs (None,572,1))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。