diff --git a/include/attribute.def b/include/attribute.def
index 723543e..0e97629 100644
--- a/include/attribute.def
+++ b/include/attribute.def
@@ -43,10 +43,9 @@
               bool,    S, local_bound,
               DType,   S, acc_type)
 
-DEF_ATTRIBUTE(TransposeConv, 7,
+DEF_ATTRIBUTE(TransposeConv, 6,
               int32_t, V, out_pad,
               int32_t, V, stride,
-              int32_t, V, output_shape,
               int32_t, S, input_zp,
               int32_t, S, weight_zp,
               bool,    S, local_bound,
diff --git a/include/tosa_generated.h b/include/tosa_generated.h
index 20f6993..1b5e164 100644
--- a/include/tosa_generated.h
+++ b/include/tosa_generated.h
@@ -883,11 +883,10 @@
   enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
     VT_OUT_PAD = 4,
     VT_STRIDE = 6,
-    VT_OUTPUT_SHAPE = 8,
-    VT_INPUT_ZP = 10,
-    VT_WEIGHT_ZP = 12,
-    VT_LOCAL_BOUND = 14,
-    VT_ACC_TYPE = 16
+    VT_INPUT_ZP = 8,
+    VT_WEIGHT_ZP = 10,
+    VT_LOCAL_BOUND = 12,
+    VT_ACC_TYPE = 14
   };
   const ::flatbuffers::Vector<int32_t> *out_pad() const {
     return GetPointer<const ::flatbuffers::Vector<int32_t> *>(VT_OUT_PAD);
@@ -895,9 +894,6 @@
   const ::flatbuffers::Vector<int32_t> *stride() const {
     return GetPointer<const ::flatbuffers::Vector<int32_t> *>(VT_STRIDE);
   }
-  const ::flatbuffers::Vector<int32_t> *output_shape() const {
-    return GetPointer<const ::flatbuffers::Vector<int32_t> *>(VT_OUTPUT_SHAPE);
-  }
   int32_t input_zp() const {
     return GetField<int32_t>(VT_INPUT_ZP, 0);
   }
@@ -916,8 +912,6 @@
            verifier.VerifyVector(out_pad()) &&
            VerifyOffset(verifier, VT_STRIDE) &&
            verifier.VerifyVector(stride()) &&
-           VerifyOffset(verifier, VT_OUTPUT_SHAPE) &&
-           verifier.VerifyVector(output_shape()) &&
            VerifyField<int32_t>(verifier, VT_INPUT_ZP, 4) &&
            VerifyField<int32_t>(verifier, VT_WEIGHT_ZP, 4) &&
            VerifyField<uint8_t>(verifier, VT_LOCAL_BOUND, 1) &&
@@ -936,9 +930,6 @@
   void add_stride(::flatbuffers::Offset<::flatbuffers::Vector<int32_t>> stride) {
     fbb_.AddOffset(TransposeConvAttribute::VT_STRIDE, stride);
   }
-  void add_output_shape(::flatbuffers::Offset<::flatbuffers::Vector<int32_t>> output_shape) {
-    fbb_.AddOffset(TransposeConvAttribute::VT_OUTPUT_SHAPE, output_shape);
-  }
   void add_input_zp(int32_t input_zp) {
     fbb_.AddElement<int32_t>(TransposeConvAttribute::VT_INPUT_ZP, input_zp, 0);
   }
@@ -966,7 +957,6 @@
     ::flatbuffers::FlatBufferBuilder &_fbb,
     ::flatbuffers::Offset<::flatbuffers::Vector<int32_t>> out_pad = 0,
     ::flatbuffers::Offset<::flatbuffers::Vector<int32_t>> stride = 0,
-    ::flatbuffers::Offset<::flatbuffers::Vector<int32_t>> output_shape = 0,
     int32_t input_zp = 0,
     int32_t weight_zp = 0,
     bool local_bound = false,
@@ -975,7 +965,6 @@
   builder_.add_acc_type(acc_type);
   builder_.add_weight_zp(weight_zp);
   builder_.add_input_zp(input_zp);
-  builder_.add_output_shape(output_shape);
   builder_.add_stride(stride);
   builder_.add_out_pad(out_pad);
   builder_.add_local_bound(local_bound);
@@ -986,19 +975,16 @@
     ::flatbuffers::FlatBufferBuilder &_fbb,
     const std::vector<int32_t> *out_pad = nullptr,
     const std::vector<int32_t> *stride = nullptr,
-    const std::vector<int32_t> *output_shape = nullptr,
     int32_t input_zp = 0,
     int32_t weight_zp = 0,
     bool local_bound = false,
     tosa::DType acc_type = tosa::DType_UNKNOWN) {
   auto out_pad__ = out_pad ? _fbb.CreateVector<int32_t>(*out_pad) : 0;
   auto stride__ = stride ? _fbb.CreateVector<int32_t>(*stride) : 0;
-  auto output_shape__ = output_shape ? _fbb.CreateVector<int32_t>(*output_shape) : 0;
   return tosa::CreateTransposeConvAttribute(
       _fbb,
       out_pad__,
       stride__,
-      output_shape__,
       input_zp,
       weight_zp,
       local_bound,
diff --git a/python/serializer/tosa_serializer.py b/python/serializer/tosa_serializer.py
index bbfb37e..be3cdea 100644
--- a/python/serializer/tosa_serializer.py
+++ b/python/serializer/tosa_serializer.py
@@ -190,7 +190,7 @@
         self.ints.append((a.AddAccType, acc_type))
 
     def TransposeConvAttribute(
-        self, outpad, stride, output_shape, input_zp, weight_zp, local_bound, acc_type
+        self, outpad, stride, input_zp, weight_zp, local_bound, acc_type
     ):
         from tosa import TransposeConvAttribute as a, Attribute
 
@@ -199,7 +199,6 @@
 
         self.intvecs.append((a.AddOutPad, outpad))
         self.intvecs.append((a.AddStride, stride))
-        self.intvecs.append((a.AddOutputShape, output_shape))
         self.ints.append((a.AddInputZp, input_zp))
         self.ints.append((a.AddWeightZp, weight_zp))
         self.bools.append((a.AddLocalBound, local_bound))
diff --git a/python/tosa/TransposeConvAttribute.py b/python/tosa/TransposeConvAttribute.py
index e5397a8..9dedfc4 100644
--- a/python/tosa/TransposeConvAttribute.py
+++ b/python/tosa/TransposeConvAttribute.py
@@ -83,62 +83,35 @@
         return o == 0
 
     # TransposeConvAttribute
-    def OutputShape(self, j):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
-        if o != 0:
-            a = self._tab.Vector(o)
-            return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4))
-        return 0
-
-    # TransposeConvAttribute
-    def OutputShapeAsNumpy(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
-        if o != 0:
-            return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o)
-        return 0
-
-    # TransposeConvAttribute
-    def OutputShapeLength(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
-        if o != 0:
-            return self._tab.VectorLen(o)
-        return 0
-
-    # TransposeConvAttribute
-    def OutputShapeIsNone(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
-        return o == 0
-
-    # TransposeConvAttribute
     def InputZp(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
+        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
         if o != 0:
             return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos)
         return 0
 
     # TransposeConvAttribute
     def WeightZp(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
+        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
         if o != 0:
             return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos)
         return 0
 
     # TransposeConvAttribute
     def LocalBound(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
+        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
         if o != 0:
             return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
         return False
 
     # TransposeConvAttribute
     def AccType(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
+        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
         if o != 0:
             return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos)
         return 0
 
 def TransposeConvAttributeStart(builder):
-    builder.StartObject(7)
+    builder.StartObject(6)
 
 def Start(builder):
     TransposeConvAttributeStart(builder)
@@ -167,38 +140,26 @@
 def StartStrideVector(builder, numElems: int) -> int:
     return TransposeConvAttributeStartStrideVector(builder, numElems)
 
-def TransposeConvAttributeAddOutputShape(builder, outputShape):
-    builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(outputShape), 0)
-
-def AddOutputShape(builder, outputShape):
-    TransposeConvAttributeAddOutputShape(builder, outputShape)
-
-def TransposeConvAttributeStartOutputShapeVector(builder, numElems):
-    return builder.StartVector(4, numElems, 4)
-
-def StartOutputShapeVector(builder, numElems: int) -> int:
-    return TransposeConvAttributeStartOutputShapeVector(builder, numElems)
-
 def TransposeConvAttributeAddInputZp(builder, inputZp):
-    builder.PrependInt32Slot(3, inputZp, 0)
+    builder.PrependInt32Slot(2, inputZp, 0)
 
 def AddInputZp(builder, inputZp):
     TransposeConvAttributeAddInputZp(builder, inputZp)
 
 def TransposeConvAttributeAddWeightZp(builder, weightZp):
-    builder.PrependInt32Slot(4, weightZp, 0)
+    builder.PrependInt32Slot(3, weightZp, 0)
 
 def AddWeightZp(builder, weightZp):
     TransposeConvAttributeAddWeightZp(builder, weightZp)
 
 def TransposeConvAttributeAddLocalBound(builder, localBound):
-    builder.PrependBoolSlot(5, localBound, 0)
+    builder.PrependBoolSlot(4, localBound, 0)
 
 def AddLocalBound(builder, localBound):
     TransposeConvAttributeAddLocalBound(builder, localBound)
 
 def TransposeConvAttributeAddAccType(builder, accType):
-    builder.PrependUint32Slot(6, accType, 0)
+    builder.PrependUint32Slot(5, accType, 0)
 
 def AddAccType(builder, accType):
     TransposeConvAttributeAddAccType(builder, accType)
diff --git a/schema/tosa.fbs b/schema/tosa.fbs
index 79b83b1..cad6db7 100644
--- a/schema/tosa.fbs
+++ b/schema/tosa.fbs
@@ -176,7 +176,6 @@
 table TransposeConvAttribute {
   out_pad: [int32];
   stride: [int32];
-  output_shape: [int32];
   input_zp: int32;
   weight_zp: int32;
   local_bound: bool;
