简体   繁体   English

python:keras package:(ValueError:没有这样的层:fc1)

[英]python : keras package : (ValueError: No such layer: fc1)

when i tryed to execute my python code, i get this error: (ValueError: No such layer: fc1): error capture当我尝试执行我的 python 代码时,我收到此错误:(ValueError:没有这样的层:fc1):错误捕获

i use in my code TensorFlow and Keras package to detect Object in image and return the similar images from custom Dataset.我在我的代码中使用 TensorFlow 和 Keras package 来检测来自 B 数据集中的自定义图像的 Z497031794414A552435F90154B4B1 中的相似图像。

it s work perfectly on local, but when i trayed in the server OVH there is always the error (i trayed to change the layer to 'block5_pool' but it's not working with my code.)它在本地工作得很好,但是当我在服务器 OVH 中托盘时总是出现错误(我托盘将图层更改为“block5_pool”,但它不适用于我的代码。)

my code:我的代码:

from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.vgg16 import VGG16, preprocess_input
from tensorflow.keras.models import Model
import numpy as np
from PIL import Image
from datetime import datetime
from flask import Flask, request, render_template
from pathlib import Path


class FeatureExtractor:
    def __init__(self):
        base_model = VGG16(weights='imagenet', include_top=False)
        self.model = Model(inputs=base_model.input, outputs=base_model.get_layer('fc1').output)

    def extract(self, img):
        """
        Extract a deep feature from an input image
        Args:
            img: from PIL.Image.open(path) or tensorflow.keras.preprocessing.image.load_img(path)

        Returns:
            feature (np.ndarray): deep feature with the shape=(4096, )
        """
        img = img.resize((224, 224))  
        img = img.convert('RGB')  
        x = image.img_to_array(img)  
        x = np.expand_dims(x, axis=0)  
        x = preprocess_input(x) 
        feature = self.model.predict(x)[0]
        return feature / np.linalg.norm(feature)


path = "/home/virtuag/www/storage/searchSCB.jpg"


img =  Image.open(path) 
app = Flask(__name__)
fe = FeatureExtractor()
features = []
img_paths = []
for feature_path in Path("/home/virtuag/www/storage/images_article").glob("*.npy"):
    features.append(np.load(feature_path))
    img_paths.append(Path("/home/virtuag/www/storage/images_article") / (feature_path.stem + ".jpg"))
features = np.array(features)
query = fe.extract(img)
dists = np.linalg.norm(features-query, axis=1)  # L2 distances to features
ids = np.argsort(dists)[:30]  # Top 30 results
scores = [img_paths[id] for id in ids]  
print (scores)```
thank you
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.vgg16 import VGG16, preprocess_input
from tensorflow.keras.models import Model
import numpy as np
from PIL import Image
#from feature_extractor import FeatureExtractor
from datetime import datetime
from flask import Flask, request, render_template
from pathlib import Path
from keras.optimizers import Adam
from tensorflow.keras.layers import Dropout, Dense, Activation, Flatten


class FeatureExtractor:
    def __init__(self):
        input_shape = (224, 224, 3)
        base_model = VGG16(weights='imagenet', include_top=False, input_shape=input_shape)
        
        for layer in base_model.layers:
            layer.trainable = False
        last = base_model.layers[-1].output
        x = Flatten()(last)
        x = Dense(1000, activation='relu', name='fc1')(x)
        x = Dropout(0.3)(x)
        x = Dense(10, activation='softmax', name='predictions')(x)
        model = Model(base_model.input, x)
        model.compile(optimizer=Adam(lr=0.001),
        loss = 'categorical_crossentropy',metrics=['accuracy'])
        self.model = Model(inputs=base_model.input, outputs=base_model.layers[-1].output)

    def extract(self, img):
        """
        Extract a deep feature from an input image
        Args:
      img: from PIL.Image.open(path) or tensorflow.keras.preprocessing.image.load_img(path)

        Returns:
            feature (np.ndarray): deep feature with the shape=(4096, )
        """
        img = img.resize((224, 224))  
        img = img.convert('RGB')  
        x = image.img_to_array(img) 
        x = np.expand_dims(x, axis=0) 
        x = preprocess_input(x)  
        feature = self.model.predict(x)[0]  
        return feature / np.linalg.norm(feature)  


path = "/home/virtuag/www/storage/searchSCB.jpg"
#path = "c:/xamppp/htdocs/projet/V-stock/PWA/public/storage/searchSCB.jpg"

img =  Image.open(path) 
app = Flask(__name__)

fe = FeatureExtractor()
features = []
img_paths = []
for feature_path in Path("/home/virtuag/www/storage/images_article").glob("*.npy"):
#for feature_path in Path("c:/xamppp/htdocs/projet/V-stock/PWA/public/storage/images_article").glob("*.npy"):
    features.append(np.load(feature_path))
    #img_paths.append(Path("c:/xamppp/htdocs/projet/V-stock/PWA/public/storage/images_article") / (feature_path.stem + ".jpg"))
    img_paths.append(Path("/home/virtuag/www/storage/images_article") / (feature_path.stem + ".jpg"))
features = np.array(features)
query = fe.extract(img)
dists = np.linalg.norm(features-query, axis=1)  
ids = np.argsort(dists)[:30]  
scores = [img_paths[id] for id in ids]  
#print (img_paths)
#print(query)

and the error : 
raceback (most recent call last):   File "server.py", line 71, in <module>     scores = [img_paths[id] for id in ids]     File "server.py", line 71, in <listcomp>     scores = [img_paths[id] for id in ids]   TypeError: only integer scalar arrays can be converted to a scalar index  

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM