回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在尝试将这段代码<a href="https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/03.%20Prototypical%20Networks%20and%20its%20Variants/3.3%20Omniglot%20Character%20set%20classification%20using%20Prototypical%20Network.ipynb" rel="nofollow noreferrer">3.3 Omniglot Character set classification using Prototypical Network.ipynb</a>从Tensorflow 1.1迁移到Tensorflow 2.x</p>
<p>我的怀疑是我不知道我到底在做什么。我遇到问题的代码是:</p>
<pre><code>import numpy as np
import tensorflow as tf
def convolution_block(inputs, out_channels, name='conv'):
conv = tf.layers.conv2d(inputs, out_channels, kernel_size=3, padding='SAME')
conv = tf.contrib.layers.batch_norm(conv, updates_collections=None, decay=0.99, scale=True, center=True)
conv = tf.nn.relu(conv)
conv = tf.contrib.layers.max_pool2d(conv, 2)
return conv
def get_embeddings(support_set, h_dim, z_dim, reuse=False):
net = convolution_block(support_set, h_dim)
net = convolution_block(net, h_dim)
net = convolution_block(net, h_dim)
net = convolution_block(net, z_dim)
net = tf.contrib.layers.flatten(net)
return net
</code></pre>
<p>我已经迁移到:</p>
<pre><code>import tensorflow as tf
from tensorflow.keras.layers import Input, Conv2D, MaxPooling2D
def get_embedding_function(img_shape):
inputs = Input(img_shape)
conv1 = Conv2D(64, (3, 3), activation='relu', padding='same', name='conv1_1')(inputs)
pool1 = MaxPooling2D(pool_size=(2, 2), data_format='channels_last', name='pool1')(conv1)
conv2 = Conv2D(96, (3, 3), activation='relu', padding='same', name='conv2_1')(pool1)
pool2 = MaxPooling2D(pool_size=(2, 2), data_format='channels_last', name='pool2')(conv2)
conv3 = Conv2D(128, (3, 3), activation='relu', padding='same', name='conv3_1')(pool2)
pool3 = MaxPooling2D(pool_size=(2, 2), data_format='channels_last', name='pool3')(conv3)
conv4 = Conv2D(256, (3, 3), activation='relu', padding='same', name='conv4_1')(pool3)
pool4 = MaxPooling2D(pool_size=(2, 2), data_format='channels_last', name='pool4')(conv4)
model = tf.keras.models.Model(inputs=inputs, outputs=pool4)
model.compile(tf.keras.optimizers.Adam(lr=(1e-4) * 2), loss='binary_crossentropy', metrics=['accuracy'])
return model
</code></pre>
<p>此函数的层与前一个函数的层不同,因为我想测试自己的网络</p>
<p><strong>我将使用此函数从图像中提取特征</p>
<p>我不得不添加<code>model = tf.keras.models.Model(inputs=inputs, outputs=pool4)</code>,因为如果我只返回<code>pool4</code>,它就不起作用了。我还添加了<code>model.compile(tf.keras.optimizers.Adam(lr=(1e-4) * 2), loss='binary_crossentropy', metrics=['accuracy'])</code>,但是<strong>我不知道我是否需要它。</strong></p>
<p>我是否需要创建模型并编译它以从图像中提取特征</p>