我试图在tensorflow.js中使用在Google Colab上训练的Keras模型,但出现此错误:“错误:顺序模型的第一层必须获取inputShape
或batchInputShape
参数。 ”已经有关于它的主题,但是没有一个解决方案真正起作用。
我使用的是经过稍微修改的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”。所以我很困惑...