子建模中的Keras模型无法编译

时间:2019-06-03 12:00:06

标签: python tensorflow keras

我想使用keras Model类的子类化/继承。当我要编译模型时,不是。

我最近开始使用喀拉拉邦,但以前使用过许多火炬。

我目前分别在1.10和2.16版本上运行tensorflow和keras,真的不知道为什么我不能编译模型。我尝试将tf更新到1.13版,但没有任何变化。


from __future__ import absolute_import, division, print_function, unicode_literals

import tensorflow as tf

from keras.layers import Input,Conv2D,MaxPooling2D,UpSampling2D,BatchNormalization
from keras import Model, layers


print(tf.VERSION)
print(tf.keras.__version__)

batch_size = 128
epochs = 50
inChannel = 1
img_width, img_height = 64, 64
input_shape = (img_width, img_height, 1)

class AE_64x64(Model):
  def __init__(self):
    super(AE_64x64, self).__init__()
    '''
    data_format: channels last
    '''
    self.conv1 = Conv2D(filters=30, kernel_size=(7,7), activation='relu', padding='same', strides=2)(Input(shape=input_shape))
    self.conv2 = Conv2D(filters=40, kernel_size=(5,5), activation='relu', padding='same', strides=2)
    self.batchnorm = BatchNormalization(axis=2)
    self.max_pool = MaxPooling2D((3,3),padding='same')
    self.conv3 = Conv2D(filters=50, kernel_size=(3,3), activation='relu', padding='same', strides=2)
    self.conv4 = Conv2D(filters=60, kernel_size=(3,3), activation='relu')
    self.b1 = Conv2D(filters=80, kernel_size=(3,3), activation='relu')
    self.b2 = Conv2D(filters=99, kernel_size=(3,3), activation='relu')
    self.conv6 = Conv2D(filters=50, kernel_size=(3,3), activation='relu')
    self.conv7 = Conv2D(filters=40, kernel_size=(3,3), activation='relu')
    self.conv8 = Conv2D(filters=30, kernel_size=(3,3), activation='relu')
    self.conv9 = Conv2D(filters=1, kernel_size=(3,3), activation='relu')


  def call(self, x):

    x = self.conv1(x)
    x = self.conv2(x)
    x = self.batchnorm(x)
    x = self.conv3(x)
    x = self.conv4(x)
    x = self.max_pool(x)
    x = self.batchnorm(x)
    x = self.b1(x)
    x = self.b2(x)
    x = self.batchnorm(x)
    x = self.conv5(x)
    x = self.conv6(x)
    x = self.batchnorm(x)
    x = self.conv7(x)
    x = self.conv8(x)
    x = self.batchnorm(x)
    x = self.conv9(x)

    return x



AE_Model = AE_64x64()

AE_Model.compile(loss='mean_squared_error',optimizer=tf.train.AdamOptimizer(),metrics= ['mean_squared_error'])

AE_Model.summary()

我希望获得摘要输出,但我收到此错误消息:

RuntimeError: You must compile your model before using it.

代码中是否存在逻辑错误或硬件/版本问题?

1 个答案:

答案 0 :(得分:0)

您至少必须构建模型。或者您可以用数据拟合模型。

无论如何,当我在没有数据的情况下运行您的代码时,会得到此结果

AE_Model.compile(loss='mean_squared_error',optimizer=tf.train.AdamOptimizer(),metrics= ['mean_squared_error'])
AE_Model.build(input_shape)
AE_Model.summary()

1.13.1
2.2.4-tf
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================