gpt4 book ai didi

python - 可以使用 Tensorflow Keras 函数式 API 模型训练 Tensorflow 变量吗?函数式 API 模型中可以使用 Tensorflow 操作吗?

转载 作者:太空狗 更新时间:2023-10-29 18:34:46 26 4
gpt4 key购买 nike

我想知道 Keras 模型是否使用 tf.get_variable 定义的函数式 API 训练变量进行编译/训练? Keras 训练也可以结合 Tensorflow 操作吗?

所以基本上我想用 Tensorflow 变量和操作定义一个 Keras 模型,然后使用

model = tf.keras.Model(inputs=inputs, outputs=predictions)
model.compile(optimizer=optimizer, loss=loss)
model.fit(data, labels, batch_size=batch_size, epochs=epochs)

训练模型。这样做的原因是 Google 的 TPU 需要 Keras 或 TF.Estimator API,更推荐使用 Keras,所以我想看看转换我的模型有多容易。

背景

看起来因为 Tensorflow 是后端,所以有混合 Keras/Tensorflow 变量的方法。这篇博文展示了如何使用 Tensorflow 图/ session 训练 Keras 变量 https://blog.keras.io/keras-as-a-simplified-interface-to-tensorflow-tutorial.html

from keras.layers import Dropout
from keras import backend as K

img = tf.placeholder(tf.float32, shape=(None, 784))
labels = tf.placeholder(tf.float32, shape=(None, 10))

x = Dense(128, activation='relu')(img)
x = Dropout(0.5)(x)
x = Dense(128, activation='relu')(x)
x = Dropout(0.5)(x)
preds = Dense(10, activation='softmax')(x)

loss = tf.reduce_mean(categorical_crossentropy(labels, preds))

train_step = tf.train.GradientDescentOptimizer(0.5).minimize(loss)
with sess.as_default():
for i in range(100):
batch = mnist_data.train.next_batch(50)
train_step.run(feed_dict={img: batch[0],
labels: batch[1],
K.learning_phase(): 1})

acc_value = accuracy(labels, preds)
with sess.as_default():
print acc_value.eval(feed_dict={img: mnist_data.test.images,
labels: mnist_data.test.labels,
K.learning_phase(): 0})

这里还表明 Tensorflow 变量可以用作 Keras 模型的输入

How to set the input of a Keras layer of a functional model, with a Tensorflow tensor?

tf_embedding_input = ...    # pre-processing output tensor

# Keras model
model = Sequential()
model.add(Input(tensor=tf_embedding_input))
model.add(Embedding(max_features, 128, input_length=maxlen))

所以我想知道 Keras 是否可以训练 Tensorflow 变量。

例子

我想在下面的 Tensorflow 架构中训练嵌入和 softmax 变量

  embeddings = tf.get_variable( 'embeddings', 
initializer= tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0))

softmax_weights = tf.get_variable( 'softmax_weights',
initializer= tf.truncated_normal([vocabulary_size, embedding_size],
stddev=1.0 / math.sqrt(embedding_size)))

softmax_biases = tf.get_variable('softmax_biases',
initializer= tf.zeros([vocabulary_size]), trainable=False )

embed = tf.nn.embedding_lookup(embeddings, train_dataset) #train data set is

embed_reshaped = tf.reshape( embed, [batch_size*num_inputs, embedding_size] )

segments= np.arange(batch_size).repeat(num_inputs)

averaged_embeds = tf.segment_mean(embed_reshaped, segments, name=None)

loss = tf.reduce_mean(
tf.nn.sampled_softmax_loss(weights=softmax_weights, biases=softmax_biases, inputs=averaged_embeds,
labels=train_labels, num_sampled=num_sampled, num_classes=vocabulary_size))

由于 Tensorflow Keras 使用 Tensorflow 后端,我猜测在某种程度上可以使用和训练 Tensorflow 变量并在训练中使用 Tensorflow 操作。

我为什么要这样做?

Google 的 TPU 要求您的架构通过 Estimator API 或 Keras API 实现。由于更推荐使用 Keras API,因此可能有兴趣将常规 Tensorflow Graph/Session 转换为使用 Keras API,并尽可能少地更改其代码。

了解如何使用 Keras 模型编译/训练合并 Tensorflow 操作和训练 Tensorflow 变量将对此有很大帮助。

最佳答案

小背景:

众所周知,Keras 是一个模型级库,为开发深度学习模型提供高级构建 block 。

最重要的是:Keras API 不处理张量运算。它需要一个经过良好优化的张量操作库来执行此操作,称为 Keras 的“后端引擎”。

此时,Keras 具有三个可用的后端引擎:TensorFlow 后端 (Google)、Theano 后端和 CNTK 后端 (MSFT)。

Knowing how to incorporate Tensorflow operations and train Tensorflow variables using the Keras model compile/train would greatly help with this.

您唯一应该问自己的是 Keras 变量和常规 Tensorflow 变量之间的区别。

碰巧是 Keras 变量有元数据。因此,为了在 Keras 中使用 TensorFlow 变量,您需要转换 them .

注意:TensorFlow 变量范围不会影响 Keras 层或模型。

最后可以通过初始化 Keras 层(或模型)来完成变量共享。

关于python - 可以使用 Tensorflow Keras 函数式 API 模型训练 Tensorflow 变量吗?函数式 API 模型中可以使用 Tensorflow 操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54050325/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com