通常,在使用诸如keras之类的高级API时,我们不会专门定义layers参数。但是在使用tensorflow核心时,所有模型的参数和权重都是专门定义的。
W1 = tf.Variable(tf.random_normal([filt1_features,
filt1_features, no_channels, conv1_features]))
b1 = tf.Variable(tf.ones([conv1_features]))
W2 = tf.Variable(tf.random_normal([filt2_features,
filt2_features, conv1_features, conv2_features]))
b2 = tf.Variable(tf.ones([conv2_features]))
还创建了辅助函数:
# Define helper functions for the convolution and maxpool layers:
def conv_layer(x, W, b):
conv = tf.nn.conv2d(x, W, strides=[1, 1, 1, 1],
padding='SAME')
conv_with_b = tf.nn.bias_add(conv, b)
conv_out = tf.nn.relu(conv_with_b)
return conv_out
def maxpool_layer(conv, k=2):
return tf.nn.max_pool(conv, ksize=[1, k, k, 1],
strides=[1, k, k, 1], padding='SAME')
这是标准的做法吗?
答案 0 :(得分:1)
这是底层API。最初,这是在TensorFlow中做事的唯一方法。如果您想使用低电平,则可以,这是正确的方法。
您可能会想要/需要更多的灵活性,但是如果您只是要使用标准层(例如池,conv2d,模型中的完全连接),那么可能没有意义,您可以简单地使用tf .layers或tf.keras.layers api,比自己编写所有内容更快,更容易出错。
这些更高级别的api最终将完成与您上面编写的内容相同的工作,只是您不必担心自己制作变量等。