Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Keras模型的TensorFlow图?_Tensorflow_Keras_Deep Learning - Fatal编程技术网

Keras模型的TensorFlow图?

Keras模型的TensorFlow图?,tensorflow,keras,deep-learning,Tensorflow,Keras,Deep Learning,是否可以在原生TensorFlow中定义一个图,然后将该图转换为Keras模型 我的意图只是(对我来说)将两个世界中最好的结合起来 我非常喜欢Keras模型API用于原型设计和新实验,即使用awesome多gpu(model,gpu=4)进行多gpu训练,使用OneLiner保存/加载权重或整个模型,所有方便的功能,如.fit(),.predict(),等等 然而,我更喜欢用原生TensorFlow定义我的模型。TF中的上下文管理器非常棒,在我看来,用它们实现GAN之类的东西要容易得多: wi

是否可以在原生TensorFlow中定义一个图,然后将该图转换为Keras模型


我的意图只是(对我来说)将两个世界中最好的结合起来

我非常喜欢Keras模型API用于原型设计和新实验,即使用awesome
多gpu(model,gpu=4)
进行多gpu训练,使用OneLiner保存/加载权重或整个模型,所有方便的功能,如
.fit()
.predict()
,等等

然而,我更喜欢用原生TensorFlow定义我的模型。TF中的上下文管理器非常棒,在我看来,用它们实现GAN之类的东西要容易得多:

with tf.variable_scope("Generator"):
    # define some layers
with tf.variable_scope("Discriminator"):
    # define some layers

# model losses
G_train_op = ...AdamOptimizer(...)
    .minimize(gloss,
    var_list=tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, 
                               scope="Generator")
D_train_op = ...AdamOptimizer(...)
    .minimize(dloss, 
    var_list=tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, 
                               scope="Discriminator")
另一个好处是以这种方式构建图表。在TensorBoard调试中,复杂的本地Keras模型是地狱,因为它们根本没有结构化。通过在本机TF中大量使用变量作用域,您可以“解开”图形并查看复杂模型的非常结构化的版本以进行调试

通过利用这一点,我可以直接设置自定义损失函数,并且不必在每次训练迭代中冻结任何内容,因为TF只会更新正确范围内的权重,这(至少在我看来)比Keras解决方案更容易在所有现有层上循环并设置
。trainable=False

TL;医生:

长话短说:我喜欢直接访问TF中的所有内容,但大多数情况下,一个简单的Keras模型足以用于培训、推理。。。后来。模型API在Keras中更容易、更方便


因此,我更愿意在native TF中建立一个图表,并将其转换为KERA,用于培训、评估等。有什么方法可以做到这一点吗?

我认为不可能为任何TF图创建一个通用的自动转换器,它将产生一组有意义的层,并具有适当的命名等。仅仅因为图比一系列Keras层更灵活

但是,您可以使用包装来包装您的模型。在函数中构建模型,用Lambda包装,然后将其放入Keras中:

def model_fn(x):
    layer_1 = tf.layers.dense(x, 100)
    layer_2 = tf.layers.dense(layer_1, 100)
    out_layer = tf.layers.dense(layer_2, num_classes)
    return out_layer

model.add(Lambda(model_fn))
这就是使用时有时会发生的情况:您可以使用三个层:输入层、模型层和输出层

Keras道歉

然而,TensorFlow和Keras之间的整合可能更加紧密和有意义。有关用例,请参见

例如,变量作用域的使用方式与TensorFlow非常相似:

x = tf.placeholder(tf.float32, shape=(None, 20, 64))
with tf.name_scope('block1'):
    y = LSTM(32, name='mylstm')(x)
手动放置设备的方法相同:

with tf.device('/gpu:0'):
    x = tf.placeholder(tf.float32, shape=(None, 20, 64))
    y = LSTM(32)(x)  # all ops / variables in the LSTM layer will live on GPU:0
此处讨论了自定义损失:

这就是我在Keras中定义的模型在Tensorboard中的外观:


因此,Keras实际上只是TensorFlow的一个简化前端,因此您可以非常灵活地混合它们。我建议您检查的源代码,寻找聪明的解决方案和模式,使您能够使用Keras的干净API构建复杂模型。

您可以将TensorFlow代码直接插入Keras模型或培训管道自2017年年中以来,Keras已完全采用并融入TensorFlow。更详细地说


这意味着您的TensorFlow模型已经是Keras模型,反之亦然。您可以在Keras中开发,并在需要时切换到TensorFlow。TensorFlow代码将与Keras API一起使用,包括用于培训、推断和保存模型的Keras API。

您正在寻找这个吗?我不这么认为。看起来这将在TensorFlow中包装功能。我正在寻找一种解决方案,在原生TensorFlow中实现NNs,然后将生成的图转换为Keras模型,这样我就可以使用TF语法构建一些复杂的图,但是要有一个易于使用的Keras运行时模型。一篇关于未来使用TensorFlow和Keras API的不同方式的可能相关文章:只想补充一点,lambda层中定义的任何东西都是不可训练的(无状态的),所以只在那里使用函数,而不是具有可训练权重的层。看见