将Keras模型导出到TensorFlow时,'Sequential'对象没有属性'_is_graph_network'

Rom*_*ler 8 python keras tensorflow

我正在尝试将Keras模型导出到TensorFlow.

Keras版本2.1.4 TF版本1.3.0 Numpy版本1.13.3

这是模型:

img_width, img_height = 150, 150
batch_size = 32
samples_per_epoch = 1000
validation_steps = 300
nb_filters1 = 32
nb_filters2 = 64
conv1_size = 3
conv2_size = 2
pool_size = 2
classes_num = 3
lr = 0.0004

model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(img_width, img_height, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())  # this converts our 3D feature maps to 1D feature vectors
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Dense(classes_num, activation='softmax'))

model.compile(loss='categorical_crossentropy',
              optimizer=optimizers.RMSprop(lr=lr),
metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)

这是导出代码:

from tensorflow.python import keras
estimator_model = keras.estimator.model_to_estimator(keras_model=model)
Run Code Online (Sandbox Code Playgroud)

这是错误:

INFO:tensorflow:使用提供的Keras模型.信息:tensorflow:使用默认配置.警告:tensorflow:使用临时文件夹作为模型目录:/home/dsxuser/.tmp/tmpbgYQQa INFO:tensorflow:使用config:{'_save_checkpoints_secs':600,'_ session_config':无,'_ keep_checkpoint_max':5,'_ task_type': 'worker','_ global_id_in_cluster':0,'_ is_chief':是的,'_ cluster_spec':,'_ evaluation_master':'','_ save_checkpoints_steps':无,'_ keep_checkpoint_every_n_hours':10000,'_ service':无,'_ num_ps_replicas': 0,'_ tf_random_seed':无,'_ master':'','_ num_worker_replicas':1,'_ task_id':0,'_ log_step_count_steps':100,'_ model_dir':'/ home/dsxuser/.tmp/tmpbgYQQa',' _save_summary_steps':100}

来自tensorflow.python import keras的()1中的AttributeErrorTraceback(最近一次调用last)----> 2 estimator_model = keras.estimator.model_to_estimator(keras_model = model)

model_to_estimator中的/opt/conda/envs/DSX-Python27/lib/python2.7/site-packages/tensorflow/python/keras/_impl/keras/estimator.pyc(keras_model,keras_model_path,custom_objects,model_dir,config)476 477 keras_weights = keras_model.get_weights() - > 478 if keras_model._is_graph_network:479#TODO(yifeif):将检查点初始化移至scaffold.init_fn 480 _save_first_checkpoint(keras_model,

AttributeError:'Sequential'对象没有属性'_is_graph_network'

有任何想法吗?

Bob*_*byG 0

我也有同样的问题。我导入keras如下 from tensorflow import keras from keras.models import Sequential model = Sequential()

等等然后它在这一行失败: estimator_model = keras.estimator.model_to_estimator(keras_model=kerasModel())

错误:

/usr/local/lib/python2.7/dist-packages/tensorflow/python/keras/_impl/keras/estimator.pyc in model_to_estimator(keras_model, keras_model_path, custom_objects, model_dir, config)
    476 
    477   keras_weights = keras_model.get_weights()
--> 478   if keras_model._is_graph_network:
    479     # TODO(yifeif): move checkpoint initialization to scaffold.init_fn
    480     _save_first_checkpoint(keras_model,

AttributeError: 'Sequential' object has no attribute '_is_graph_network'
Run Code Online (Sandbox Code Playgroud)

我使用的是张量流1.7

我通过明确指定模型的层找到了解决方案:

def kerasModel():
    # Define the model
    model = keras.models.Sequential()
    #model = Sequential()
    # input: 100x100 images with 3 channels -> (100, 100, 3) tensors.
    # this applies 32 convolution filters of size 3x3 each.
    model.add(keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(100, 100, 3), name="data2d"))
    model.add(keras.layers.Conv2D(32, (3, 3), activation='relu'))
    model.add(keras.layers.MaxPooling2D(pool_size=(2, 2)))
    model.add(keras.layers.Dropout(0.25))

    model.add(keras.layers.Conv2D(64, (3, 3), activation='relu'))
    model.add(keras.layers.Conv2D(64, (3, 3), activation='relu'))
    model.add(keras.layers.MaxPooling2D(pool_size=(2, 2)))
    model.add(keras.layers.Dropout(0.25))

    model.add(keras.layers.Flatten())
    model.add(keras.layers.Dense(256, activation='relu'))
    model.add(keras.layers.Dropout(0.5))
    model.add(keras.layers.Dense(10, activation='softmax', name='labels'))

    # Compile the model
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

    return model
Run Code Online (Sandbox Code Playgroud)

即通过放置 keras.layers。在上面的每一行中。以前我依赖进口:

#from keras.models import Sequential 
#from keras.layers import Dense, Dropout, Flatten 
#from keras.layers import Conv2D, MaxPooling2D 
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我现在已经注释掉了。请注意,我还放置了 keras.models。在 Sequential() 前面,这可能也是必要的。看看这是否适合你。