Python 类型错误:'_TupleWrapper';运行对象检测模型ssd时,对象不可调用
我建立自己的vgg网络Python 类型错误:'_TupleWrapper';运行对象检测模型ssd时,对象不可调用,python,tensorflow,computer-vision,tensorflow2.0,vgg-net,Python,Tensorflow,Computer Vision,Tensorflow2.0,Vgg Net,我建立自己的vgg网络 然后我创建数据集,然后运行列车 def run_train(dataset, num_epochs=2): start_time = time.perf_counter() model = VGGBase() for _ in tf.data.Dataset.range(num_epochs): for image,target in dataset: # (batch_size (N), 300, 300, 3)
然后我创建数据集,然后运行列车
def run_train(dataset, num_epochs=2):
start_time = time.perf_counter()
model = VGGBase()
for _ in tf.data.Dataset.range(num_epochs):
for image,target in dataset: # (batch_size (N), 300, 300, 3)
print(type(image), type(target))
这种类型是
<class 'tensorflow.python.framework.ops.EagerTensor'> <class 'tensorflow.python.ops.ragged.ragged_tensor.RaggedTensor'>
删除模型(VGGBase)中的尾随逗号应该可以。删除模型(VGGBase)中的尾随逗号应该可以
self.conv2_1 = tf.keras.layers.Conv2D(128, kernel_size=3, padding='same',strides= 1,activation='relu'),
self.conv2_2 = tf.keras.layers.Conv2D(128, kernel_size=3,padding='same',strides= 1,activation='relu'),
self.pool2 = tf.keras.layers.MaxPool2D(2,2),
self.conv3_1 = tf.keras.layers.Conv2D(256, kernel_size=3, padding='same',strides= 1,activation='relu'),
self.conv3_2 = tf.keras.layers.Conv2D(256, kernel_size=3, padding='same',strides= 1,activation='relu'),
self.conv3_3 = tf.keras.layers.Conv2D(256, kernel_size=3, padding='same',strides= 1,activation='relu'),
self.pool3 = tf.keras.layers.MaxPool2D(2,2),
self.conv4_1 = tf.keras.layers.Conv2D(512, kernel_size=3, padding='same', strides=1,activation='relu'),
self.conv4_2 = tf.keras.layers.Conv2D(512, kernel_size=3, padding='same', strides=1,activation='relu'),
self.conv4_3 = tf.keras.layers.Conv2D(512, kernel_size=3, padding='same', strides=1,activation='relu'),
self.pool4 = tf.keras.layers.MaxPool2D(2, 2),
self.conv5_1 = tf.keras.layers.Conv2D(512, kernel_size=3, padding='same', strides=1,activation='relu'),
self.conv5_2 = tf.keras.layers.Conv2D(512, kernel_size=3, padding='same', strides=1,activation='relu'),
self.conv5_3 = tf.keras.layers.Conv2D(512, kernel_size=3, padding='same', strides=1,activation='relu'),
self.pool5 = tf.keras.layers.MaxPool2D(2, 2),
self.padding6 = tf.keras.layers.ZeroPadding2D(padding=(6, 6)) # put this before your conv layer
self.conv6 = tf.keras.layers.Conv2D(1024, kernel_size=3, padding='same',dilation_rate=6,activation='relu') # atrous convolution
self.conv7 = tf.keras.layers.Conv2D(1024, kernel_size=1,activation='relu')
#self.load_weights()
def call(self,x):
x = self.padding_1(x)
x = self.conv1_1(x)# (N, 64, 300, 300)
x = self.conv1_2(x)# (N, 64, 300, 300)
x = self.pool1(x) # (N, 64, 150, 150)
x = self.conv2_1(x) # (N, 128, 150, 150)
x = self.conv2_2(x) # (N, 128, 150, 150)
x = self.pool2(x)# (N, 128, 75, 75)
x = self.conv3_1(x) # (N, 256, 75, 75)
x = self.conv3_2(x)# (N, 256, 75, 75)
x = self.conv3_3(x)# (N, 256, 75, 75)
x = self.pool3(x) #(N, 256, 38, 38), it would have been 37 if not for ceil_mode = True
x = self.conv4_1(x)# (N, 512, 38, 38)
x = self.conv4_2(x)# (N, 512, 38, 38)
x = self.conv4_3(x)# (N, 512, 38, 38)
conv4_3_feats = x# (N, 512, 38, 38)
x = self.pool4(x)# (N, 512, 19, 19)
x = self.conv5_1(x) # (N, 512, 19, 19)
x = self.conv5_2(x) # (N, 512, 19, 19)
x = self.conv5_3(x) # (N, 512, 19, 19)
x = self.pool5(x) # (N, 512, 19, 19), pool5 does not reduce dimensions
x = self.padding6(x)
x = self.conv6(x) # (N, 1024, 19, 19)
x = self.conv7(x) # (N, 1024, 19, 19)
conv7_feats = x
return conv4_3_feats, conv7_feats