Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用tf slim重新训练预先训练过的ResNet-50模型,用于分类_Python_Tensorflow_Resnet_Pre Trained Model_Tensorflow Slim - Fatal编程技术网

Python 使用tf slim重新训练预先训练过的ResNet-50模型,用于分类

Python 使用tf slim重新训练预先训练过的ResNet-50模型,用于分类,python,tensorflow,resnet,pre-trained-model,tensorflow-slim,Python,Tensorflow,Resnet,Pre Trained Model,Tensorflow Slim,我想用TensorFlow slim重新训练一个预先训练过的ResNet-50模型,然后将其用于分类目的 ResNet-50设计为1000个等级,但我只希望输出10个等级(土地覆盖类型) 首先,我尝试只为一个图像编写代码,这是我以后可以概括的。 这是我的代码: from tensorflow.contrib.slim.nets import resnet_v1 import tensorflow as tf import tensorflow.contrib.slim as slim impor

我想用TensorFlow slim重新训练一个预先训练过的ResNet-50模型,然后将其用于分类目的

ResNet-50设计为1000个等级,但我只希望输出10个等级(土地覆盖类型)

首先,我尝试只为一个图像编写代码,这是我以后可以概括的。 这是我的代码:

from tensorflow.contrib.slim.nets import resnet_v1
import tensorflow as tf
import tensorflow.contrib.slim as slim
import numpy as np

batch_size = 1
height, width, channels = 224, 224, 3
# Create graph
inputs = tf.placeholder(tf.float32, shape=[batch_size, height, width, channels])
with slim.arg_scope(resnet_v1.resnet_arg_scope()):
    logits, end_points = resnet_v1.resnet_v1_50(inputs, is_training=False)

saver = tf.train.Saver()    

with tf.Session() as sess:
    saver.restore(sess, 'd:/bitbucket/cnn-lcm/data/ckpt/resnet_v1_50.ckpt')
    representation_tensor = sess.graph.get_tensor_by_name('resnet_v1_50/pool5:0')
    #  list of files to read
    filename_queue = tf.train.string_input_producer(['d:/bitbucket/cnn-lcm/data/train/AnnualCrop/AnnualCrop_735.jpg']) 
    reader = tf.WholeFileReader()
    key, value = reader.read(filename_queue)
    img = tf.image.decode_jpeg(value, channels=3)    

    im = np.array(img)
    im = im.reshape(1,224,224,3)
    predict_values, logit_values = sess.run([end_points, logits], feed_dict= {inputs: im})
    print (np.max(predict_values), np.max(logit_values))
    print (np.argmax(predict_values), np.argmax(logit_values))

    #img = ...  #load image here with size [1, 224,224, 3]
    #features = sess.run(representation_tensor, {'Placeholder:0': img})
我有点困惑接下来会发生什么(我应该打开一个图表,或者我应该加载网络结构并加载权重,或者加载批次。图像形状也有问题。有很多多功能文档,不容易解释:/

有没有建议如何更正代码以符合我的目的

测试图像:AnnualCrop735


如果您提供
num\u类
kwargs,resnet层将为您提供预测

您需要在其上添加丢失函数和训练操作,以便通过重用对resnet_v1进行微调

...
with slim.arg_scope(resnet_v1.resnet_arg_scope()):
    logits, end_points = resnet_v1.resnet_v1_50(
        inputs,
        num_classes=10,
        is_training=True,
        reuse=tf.AUTO_REUSE)
...
...
    classification_loss = slim.losses.softmax_cross_entropy(
        predict_values, im_label)

    regularization_loss = tf.add_n(slim.losses.get_regularization_losses())
    total_loss = classification_loss + regularization_loss

    train_op = slim.learning.create_train_op(classification_loss, optimizer)
    optimizer = tf.train.GradientDescentOptimizer(learning_rate)

    slim.learning.train(
        train_op,
        logdir='/tmp/',
        number_of_steps=1000,
        save_summaries_secs=300,
        save_interval_secs=600)

问题是,在计算分类损失之前,我有错误。像这样,还有很多错误:tensorflow.python.framework.errors\u impl.InvalidArgumentError:Assign需要两个张量的形状匹配。lhs shape=[10]rhs shape=[1000][[Node:save/Assign\u 265=Assign[T=DT\u FLOAT,\u class=[“loc:@resnet\u v1\u 50/logits/biases”],使用_locking=true,validate_shape=true,_device=“/job:localhost/replica:0/task:0/device:CPU:0”](resnet_v1_50/logits/biases,save/RestoreV2_265)]]