Gla*_*lau 5 machine-learning theano deep-learning keras tensorflow
例如(我可以用Theano做到这一点而没有问题):
# log_var has shape --> (num, )
# Mean has shape --> (?, num)
std_var = T.repeat(T.exp(log_var)[None, :], Mean.shape[0], axis=0)
Run Code Online (Sandbox Code Playgroud)
使用TensorFlow我可以做到这一点:
std_var = tf.tile(tf.reshape(tf.exp(log_var), [1, -1]), (tf.shape(Mean)[0], 1))
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何为Keras做同样的事情,可能是这样的:
std_var = K.repeat(K.reshape(K.exp(log_var), [1, -1]), Mean.get_shape()[0])
Run Code Online (Sandbox Code Playgroud)
要么
std_var = K.repeat_elements(K.exp(log_var), Mean.get_shape()[0], axis=0)
Run Code Online (Sandbox Code Playgroud)
...,因为Mean在轴0处的尺寸未知。
我需要此用于自定义图层输出:
return K.concatenate([Mean, Std], axis=1)
Run Code Online (Sandbox Code Playgroud)
Keras 有一个您似乎已经找到的抽象层keras.backend(您将其称为K)。该层提供了您所需的 Theano 和 TensorFlow 的所有功能。
假设您的 TensorFlow 代码可以运行,即
std_var = tf.tile(tf.reshape(tf.exp(log_var), [1, -1]), (tf.shape(Mean)[0], 1))
Run Code Online (Sandbox Code Playgroud)
然后你可以将其翻译为抽象版本,如下所示:
std_var = K.tile(K.reshape(K.exp(log_var), (1, -1)), K.shape(Mean)[0])
Run Code Online (Sandbox Code Playgroud)
Theano 和 TensorFlow 都支持未知轴语法(-1对于未知轴),因此这不是问题。
顺便说一句,我不确定你的 TF 代码是否正确。你重塑为(1, -1),这意味着轴 0 的维度将为 1。我认为你更想做的是这样做:
std_var = K.tile(K.reshape(K.exp(log_var), (-1, num)), K.shape(Mean)[0])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2128 次 |
| 最近记录: |