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 输出标签粘贴到vgg16中的相同值_Python_Tensorflow_Keras_Conv Neural Network_Imagenet - Fatal编程技术网

Python 输出标签粘贴到vgg16中的相同值

Python 输出标签粘贴到vgg16中的相同值,python,tensorflow,keras,conv-neural-network,imagenet,Python,Tensorflow,Keras,Conv Neural Network,Imagenet,我试图在svhn数据集上运行用于数字检测的VGG16模型 然而,预测值总是相同的。 我试着给图像加上- 从0-255缩放到0-1 从每个图像中减去平均值 除以标准差 下面是我运行它的方式: 初始化VGG16: vgg = tf.keras._impl.keras.applications.vgg16.VGG16 (include_top=True, weights=None, input_tensor=None, input_shape=(64,64,3),

我试图在svhn数据集上运行用于数字检测的VGG16模型

然而,预测值总是相同的。 我试着给图像加上-

  • 从0-255缩放到0-1

  • 从每个图像中减去平均值

  • 除以标准差

  • 下面是我运行它的方式:

    初始化VGG16:

    vgg = tf.keras._impl.keras.applications.vgg16.VGG16 
        (include_top=True,
        weights=None,
        input_tensor=None,
        input_shape=(64,64,3),
        pooling='max',
        classes=10)
    
    vgg.compile(loss=tf.keras.losses.categorical_crossentropy,  
    optimizer=tf.keras.optimizers.SGD(lr=1e-4, momentum=0.9, nesterov=True),metrics=['mae', 'acc'])
    #Here train_data shape is (None,64,64,3) and labels_data shape is (None,10) and are one hot like labels
    vgg.fit(train_data, labels_data, epochs=5, batch_size=96)
    
    列车数据的读取和预处理如下:

    train_data = sio.loadmat('datasets/housing/train_32x32.mat')
    
    以下是我用来预处理列车运行数据的两个函数:

    import numpy as np
    import cv2
    import tensorflow as tf
    import os
    import scipy
    from skimage import data, io, filters
    import scipy.io as sio
    from utils import *
    import h5py
    
    from tensorflow.python.keras._impl.keras import backend as K
    from tensorflow.python.keras._impl.keras.applications.imagenet_utils         import _obtain_input_shape
    from tensorflow.python.keras._impl.keras.applications.imagenet_utils import decode_predictions  # pylint: disable=unused-import
    from tensorflow.python.keras._impl.keras.applications.imagenet_utils import preprocess_input  # pylint: disable=unused-import
    from tensorflow.python.keras._impl.keras.engine.topology import get_source_inputs
    from tensorflow.python.keras._impl.keras.layers import Conv2D
    from tensorflow.python.keras._impl.keras.layers import Dense
    from tensorflow.python.keras._impl.keras.layers import Flatten
    from tensorflow.python.keras._impl.keras.layers import GlobalAveragePooling2D
    from tensorflow.python.keras._impl.keras.layers import     GlobalMaxPooling2D
    from tensorflow.python.keras._impl.keras.layers import Input
    from tensorflow.python.keras._impl.keras.layers import MaxPooling2D
    from tensorflow.python.keras._impl.keras.models import Model
    from tensorflow.python.keras._impl.keras.utils import layer_utils
    from tensorflow.python.keras._impl.keras.utils.data_utils import get_file
    from tensorflow.python.keras._impl.keras.engine import Layer
    
    def reshape_mat_vgg (QUANTITY,matfilepath='datasets/housing/train_32x32.mat', type="non-quantized", size=(64,64)):
    data = read_mat_file (matfilepath)
    train = data['X'][:,:,:,0:QUANTITY]
    train = np.swapaxes(np.swapaxes(np.swapaxes(train,2,3),1,2),0,1)
    labels = data['y'][0:QUANTITY]
    labels_data = []; labels_data = np.array(labels_data)
    train_data = np.zeros((QUANTITY,size[0],size[1],3))
    print "Reorganizing Data..."
    for i in range(QUANTITY):
        image_i = np.copy(train[i,:,:,:])
        image_i = preprocess_small_vgg16 (image_i, new_size=size, type=type)
        train_data[i,:,:,:] = image_i
        label_i = np.zeros((10)); label_i[labels[i]-1] = 1.0; label_i = label_i.reshape(1,10)
        if i == 0:
            labels_data = np.vstack(( label_i ))
        else:
            labels_data = np.vstack(( labels_data, label_i ))
        if i % 1000 == 0:
            print i*100/(QUANTITY-1),"percent done..."
    print "100 percent done..."
    return train_data, labels_data
    
    
    
    def preprocess_small_vgg16 (image, new_size=(64,64), type="non-quantized"):    
    img = np.copy (image)
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    #Whitening
    imgnorm = img * 255.0/np.max(img)
    #Normalisation
    gray = imgnorm
    borderless  = gray[:,5:gray.shape[1]-5,:] # centering
    final_img = (cv2.resize (borderless, new_size))
    final_img = final_img/np.max(final_img) #scaling 0-1
    stddev = np.std(final_img); mn = np.mean (final_img)
    final_img = (final_img - mn) / stddev #standardizing
    return final_img
    
    输出:

    Epoch 1/10
    5000/5000 [==============================] - 1346s - loss: 3.2877 - 
    mean_absolute_error: 0.0029 - acc: 0.1850         
    Epoch 2/10
    
    在多个时代运行没有帮助。我试了5个时代

    当我检查输出或预测时,它显示所有输入的相同结果,例如(使用np.argmax(pred,axis=-1)转换):


    请在我的模型上标出这个问题

    我认为您的大部分问题是,5个时代远远不够VGG权重收敛。在VGG原创论文中,作者说他们训练了370K迭代(74个时代)以获得最好的结果,所以你可以考虑给它更多的时间来收敛。

    我已经将您的数据集输入到,您可以看到经过数千次迭代后,总损失是如何减少的


    当然,您可以微调学习速率衰减,以防止在高原上花费时间

    哈哈哇,要多少天才能完成?即使是我的笔记本电脑电池也不能支持那么多…@user3206070这是几天的时间,但我认为如果你手动衰减学习速度,你可能会在4~5小时内达到相同的结果。你使用sgd optimizer,训练集大小是多少?@user3206070训练集大小是50k,批量大小是256。嘿,出于好奇,您知道tf用于卷积的内核内容是什么吗?
    [3 3 3 . . . 3 3 3]