Модель Keras из подмоделирования не умеет компилироваться - PullRequest
0 голосов
/ 03 июня 2019

Я хочу использовать наследование / наследование класса модели keras. Когда я хочу собрать свою модель, это не так.

Я недавно начал с керас, но раньше использовал много pytorch.

В настоящее время я использую tenorflow и keras в версиях 1.10 и 2.16 соответственно и действительно не знаю, почему я не могу скомпилировать модель. Я попытался обновить 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 голосов
/ 03 июня 2019

вам по крайней мере нужно построить свою модель. Или вы подходите вашей модели с данными.

в любом случае, когда я запускаю ваш код без данных, я получаю этот результат

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 #   
=================================================================
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...