San*_*ta7 11 python keras tensorflow
我想知道Keras模型是否使用函数API训练变量进行编译/训练tf.get_variable?Can 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)
Run Code Online (Sandbox Code Playgroud)
训练模型.原因是Google的TPU要求使用Keras或TF.Estimator API,更推荐使用Keras,所以我希望看到我能够轻松转换模型.
看起来像Tensorflow是后端,有很多方法可以混合使用Keras/Tensorflow变量.这篇博文显示了如何使用Tensorflow图/会话来训练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})
Run Code Online (Sandbox Code Playgroud)
此外,它还显示Tensorflow变量可用作Keras模型的输入
如何使用Tensorflow张量设置功能模型的Keras层的输入?
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))
Run Code Online (Sandbox Code Playgroud)
所以我想知道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))
Run Code Online (Sandbox Code Playgroud)
由于Tensorflow Keras使用Tensorflow后端,我猜测在某种程度上可以使用和训练Tensorflow变量并在训练中使用Tensorflow操作.
Google的TPU要求您的架构通过Estimator API或Keras API实现.由于更推荐使用Keras API,因此可能有兴趣将常规Tensorflow图表/会话转换为使用Keras API,尽可能少地修改代码.
知道如何结合Tensorflow操作并使用Keras模型编译/训练训练Tensorflow变量将极大地帮助解决这个问题.
小背景:
正如我们所知,Keras 是一个模型级库,为开发深度学习模型提供高级构建块。
最重要的是:Keras API 不处理张量操作。它需要一个经过良好优化的张量操作库来做到这一点,称为 Keras 的“后端引擎”。
目前,Keras 拥有三个可用的后端引擎:TensorFlow 后端(Google)、Theano 后端和 CNTK 后端(MSFT)。
了解如何合并 Tensorflow 操作并使用 Keras 模型编译/训练来训练 Tensorflow 变量将对此有很大帮助。
您唯一应该问自己的是,Keras 变量和常规 Tensorflow 变量之间有什么区别。
恰好是 Keras 变量具有元数据。因此,为了在 Keras 中使用 TensorFlow 变量,您需要将它们转换为.
注意:TensorFlow 变量范围不会影响 Keras 层或模型。
最后,可以通过初始化 Keras 层(或模型)来实现变量共享。
| 归档时间: |
|
| 查看次数: |
1317 次 |
| 最近记录: |