从python转换张量流模型-input_shape

时间:2020-05-13 20:22:49

标签: keras tensorflow.js

我试图在tensorflow.js中使用在Google Colab上训练的Keras模型,但出现此错误:“错误:顺序模型的第一层必须获取inputShapebatchInputShape参数。 ”已经有关于它的主题,但是没有一个解决方案真正起作用。 我使用的是经过稍微修改的pix 2 pix体系结构-基于在tensorflow页面上发布的教程。

这是我要转换的生成器模型:

def build_gen_model():

  inputs = tf.keras.layers.Input(batch_shape=(None,img_size,img_size,channels))


  input_shape=(img_size,img_size,channels)

  n = int(math.log2(img_size))

  downstack = [
               downsample(64,5,batch_norm=False,input_shape=input_shape ),
               downsample(128,5),
               downsample(256,5)
  ]

  for _ in range(n-3):
    downstack.append(downsample(512,5))

  upstack = []

  for _ in range(n-4):
    upstack.append(upsample(512,5,dropout=True))

  upstack.append(upsample(256,5))
  upstack.append(upsample(128,5))
  upstack.append(upsample(64,5))

  last = tf.keras.layers.Conv2DTranspose(channels,kernel_size=5,strides=2,padding='same',activation='tanh')

  x=inputs

  skips =[]
  for d in downstack:
    x = d(x)
    skips.append(x)

  skips = reversed(skips[:-1])

  for u, skip in zip(upstack,skips):
    x = u(x)
    x = tf.keras.layers.Concatenate()([x,skip])

  x = last(x)

  return tf.keras.Model(inputs=inputs, outputs=x)

我添加了(我认为可能没有必要)一个额外的参数,该参数使我可以向第一个下采样层添加额外的输入形状,但这也无济于事。

def downsample(filters, kernel_size, batch_norm=True, input_shape=None):
  model = tf.keras.Sequential()
  if not input_shape:
    model.add(tf.keras.layers.Conv2D(filters,kernel_size=kernel_size,strides=2,padding='same'))
  else:
    model.add(tf.keras.layers.Conv2D(filters,kernel_size=kernel_size,strides=2,padding='same',input_shape=input_shape))

  if batch_norm:
    model.add(tf.keras.layers.BatchNormalization())

  model.add(tf.keras.layers.LeakyReLU())
  return model

我要保存为.h5,然后使用在我的PC上本地安装了pip的tensorflowjs进行转换。生成的JSON实际上确实出现了“ batch_input_shape”。所以我很困惑...

0 个答案:

没有答案