使用带 tf.keras 的张量流函数
using tensorflow functions with tf.keras
我有一个关于 tf.keras 和 tf 2.0 中的 tf 函数的问题。
如果我有这样的模型:
inputdata = keras.Input(shape=(2048, 1))
x = layers.Conv1D(16, 3, activation='relu')(inputdata)
x = layers.Conv1D(32, 3, activation='relu')(x)
x = layers.Conv1D(64, 3, activation='relu')(x)
我想添加这样的自定义函数,它是一维子像素层:
def SubPixel1D(I, r):
with tf.name_scope('subpixel'):
X = tf.transpose(I, [2,1,0]) # (r, w, b)
X = tf.batch_to_space_nd(X, [r], [[0,0]]) # (1, r*w, b)
X = tf.transpose(X, [2,1,0])
return X
我可以毫无问题地将这一层包含在 keras 中吗?由于 tensorflow 2.0 比之前的 tensorflow 版本简单得多,我不确定这是否不会混淆后端和会话?
inputdata = keras.Input(shape=(2048, 1))
x = layers.Conv1D(16, 3, activation='relu')(inputdata)
x = layers.Conv1D(32, 3, activation='relu')(x)
x = SubPixel1D(x,2)
x = layers.Conv1D(64, 3, activation='relu')(x)
在编译和拟合模型之后会起作用吗?如果
导入了 tensorflow 和 keras
import tensorflow as tf
from tensorflow import keras
类似于keras中的自定义损失函数。
如果我这样定义自定义损失函数:
def my_loss(y_true, y_pred):
# compute l2 loss/ equal to Keras squared mean
sqrt_l2_loss = tf.reduce_mean((y_pred-y_true)**2, axis=[1, 2])
avg_sqrt_l2_loss = tf.reduce_mean(sqrt_l2_loss, axis=0)
return avg_sqrt_l2_loss
并使用 tf.操作或函数,我可以像往常一样将这个函数传递给keras吗?
我可以在 Keras loss 中使用它吗?
只需子类化 tf.keras.Layer
就可以了。这里有很好的参考:https://www.tensorflow.org/guide/keras/custom_layers_and_models。您的图层应如下所示:
class SubPixel1D(tf.keras.layers.Layer):
def __init__(self, r)
super(SubPixel1D, self).__init__()
self.r = r
def call(self, inputs):
with tf.name_scope('subpixel'):
X = tf.transpose(inputs, [2,1,0]) # (r, w, b)
X = tf.batch_to_space_nd(X, [self.r], [[0,0]]) # (1, r*w, b)
X = tf.transpose(X, [2,1,0])
return X
然后在定义模型时调用它
inputdata = keras.Input(shape=(2048, 1))
x = layers.Conv1D(16, 3, activation='relu')(inputdata)
x = layers.Conv1D(32, 3, activation='relu')(x)
x = SubPixel1D(2)(x)
x = layers.Conv1D(64, 3, activation='relu')(x)
我不知道 tf.name_scope
会如何表现,但我没有看到任何直接问题。
我有一个关于 tf.keras 和 tf 2.0 中的 tf 函数的问题。 如果我有这样的模型:
inputdata = keras.Input(shape=(2048, 1))
x = layers.Conv1D(16, 3, activation='relu')(inputdata)
x = layers.Conv1D(32, 3, activation='relu')(x)
x = layers.Conv1D(64, 3, activation='relu')(x)
我想添加这样的自定义函数,它是一维子像素层:
def SubPixel1D(I, r):
with tf.name_scope('subpixel'):
X = tf.transpose(I, [2,1,0]) # (r, w, b)
X = tf.batch_to_space_nd(X, [r], [[0,0]]) # (1, r*w, b)
X = tf.transpose(X, [2,1,0])
return X
我可以毫无问题地将这一层包含在 keras 中吗?由于 tensorflow 2.0 比之前的 tensorflow 版本简单得多,我不确定这是否不会混淆后端和会话?
inputdata = keras.Input(shape=(2048, 1))
x = layers.Conv1D(16, 3, activation='relu')(inputdata)
x = layers.Conv1D(32, 3, activation='relu')(x)
x = SubPixel1D(x,2)
x = layers.Conv1D(64, 3, activation='relu')(x)
在编译和拟合模型之后会起作用吗?如果 导入了 tensorflow 和 keras
import tensorflow as tf
from tensorflow import keras
类似于keras中的自定义损失函数。 如果我这样定义自定义损失函数:
def my_loss(y_true, y_pred):
# compute l2 loss/ equal to Keras squared mean
sqrt_l2_loss = tf.reduce_mean((y_pred-y_true)**2, axis=[1, 2])
avg_sqrt_l2_loss = tf.reduce_mean(sqrt_l2_loss, axis=0)
return avg_sqrt_l2_loss
并使用 tf.操作或函数,我可以像往常一样将这个函数传递给keras吗? 我可以在 Keras loss 中使用它吗?
只需子类化 tf.keras.Layer
就可以了。这里有很好的参考:https://www.tensorflow.org/guide/keras/custom_layers_and_models。您的图层应如下所示:
class SubPixel1D(tf.keras.layers.Layer):
def __init__(self, r)
super(SubPixel1D, self).__init__()
self.r = r
def call(self, inputs):
with tf.name_scope('subpixel'):
X = tf.transpose(inputs, [2,1,0]) # (r, w, b)
X = tf.batch_to_space_nd(X, [self.r], [[0,0]]) # (1, r*w, b)
X = tf.transpose(X, [2,1,0])
return X
然后在定义模型时调用它
inputdata = keras.Input(shape=(2048, 1))
x = layers.Conv1D(16, 3, activation='relu')(inputdata)
x = layers.Conv1D(32, 3, activation='relu')(x)
x = SubPixel1D(2)(x)
x = layers.Conv1D(64, 3, activation='relu')(x)
我不知道 tf.name_scope
会如何表现,但我没有看到任何直接问题。