2017-04-15 21 views
0

現在我正在使用keras。 我正在製作圖像識別系統。 但我得到一個錯誤,json文件可能是錯誤的

Using TensorFlow backend. 
Traceback (most recent call last): 
    File "use_model.py", line 35, in <module> 
    model = model_from_json(open(keras_model).read()) 
    File "/Users/xx/anaconda/envs/py36/lib/python3.6/site-packages/keras/models.py", line 212, in model_from_json 
    config = json.loads(json_string) 
    File "/Users/xx/anaconda/envs/py36/lib/python3.6/json/__init__.py", line 354, in loads 
    return _default_decoder.decode(s) 
    File "/Users/xx/anaconda/envs/py36/lib/python3.6/json/decoder.py", line 339, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/Users/xx/anaconda/envs/py36/lib/python3.6/json/decoder.py", line 357, in raw_decode 
    raise JSONDecodeError("Expecting value", s, err.value) from None 
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 

我認爲JSON文件是壞我的應用程序,所以我刪除test.json。 但在那個時候,我得到了一個錯誤

Using TensorFlow backend. 
Traceback (most recent call last): 
    File "use_model.py", line 35, in <module> 
    model = model_from_json(open(keras_model).read()) 
FileNotFoundError: [Errno 2] No such file or directory: './test.json' 

我想這是自然的(因爲我刪除了JSON文件) 我不知道該怎麼fix.What我應該怎麼辦? 我的整個的代碼是這樣

# coding:utf-8 
import keras 
import sys, os 
import scipy 
import scipy.misc 
import numpy as np 
from keras.models import model_from_json 

import json 

imsize = (32, 32) 
testpic = "./testpic/" 
keras_model = "./test.json" 
keras_param = "./test.hdf5" 


def load_image(path): 
    img = scipy.misc.imread(path, mode="RGB") 
    img = scipy.misc.imresize(img, imsize) 
    img = img/255.0 
    return img 

def get_file(dir_path): 
    """ 
    ['244573113_thumb.jpg', 'car1.jpg', 'car2.jpg', 'car3.jpg', 'cat1.jpg', 'cat2.jpg', 'cat3.jpg', 'dog1.jpg', 'dog2.jpg', 'dog3.jpg', 'dog4.jpg', 'dog5.jpg', 'dog6.jpg', 'dog7.jpg'] 
    """ 
    filenames = os.listdir(dir_path) 
    return filenames 

if __name__ == "__main__": 

    pic = get_file(testpic) 

    model = model_from_json(open(keras_model).read()) 
    model.load_weights(keras_param) 
    model.summary() 

    for i in pic: 
     print(i) 
     img = load_image(testpic + i) 
     #vec = model.predict(np.array([img]), batch_size=1) 
     prd = model.predict(np.array([img])) 
     print(prd) 
     prelabel = np.argmax(prd, axis=1) 


     if prelabel == 0: 
      print(">>>cat") 
     elif prelabel == 1: 
      print(">>> dog") 
     elif prelabel == 2: 
      print(">>> other") 

     print("#"*55) 

回答

0

什麼是JSON文件刪除前?

它看起來像一個無效的json文件。也許它是空的?

>>> import json 
>>> json.loads('') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib64/python3.5/json/__init__.py", line 319, in loads 
    return _default_decoder.decode(s) 
    File "/usr/lib64/python3.5/json/decoder.py", line 339, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/usr/lib64/python3.5/json/decoder.py", line 357, in raw_decode 
    raise JSONDecodeError("Expecting value", s, err.value) from None 
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 

也許該文件根本不包含JSON文件:

>>> json.loads('hello') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib64/python3.5/json/__init__.py", line 319, in loads 
    return _default_decoder.decode(s) 
    File "/usr/lib64/python3.5/json/decoder.py", line 339, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/usr/lib64/python3.5/json/decoder.py", line 357, in raw_decode 
    raise JSONDecodeError("Expecting value", s, err.value) from None 
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 

這是給你的是什麼在JSON文件預期的想法的例子:

import json 
from keras.models import Model 
from keras.layers import Input, Dense 

a = Input(shape=(32,)) 
b = Dense(32)(a) 
model = Model(inputs=a, outputs=b) 

print(model.to_json(indent=4)) 

輸出

 
{ 
    "config": { 
     "input_layers": [ 
      [ 
       "input_2", 
       0, 
       0 
      ] 
     ], 
     "output_layers": [ 
      [ 
       "dense_2", 
       0, 
       0 
      ] 
     ], 
     "name": "model_3", 
     "layers": [ 
      { 
       "config": { 
        "batch_input_shape": [ 
         null, 
         32 
        ], 
        "name": "input_2", 
        "sparse": false, 
        "dtype": "float32" 
       }, 
       "name": "input_2", 
       "inbound_nodes": [], 
       "class_name": "InputLayer" 
      }, 
      { 
       "config": { 
        "bias_initializer": { 
         "config": {}, 
         "class_name": "Zeros" 
        }, 
        "bias_regularizer": null, 
        "name": "dense_2", 
        "kernel_regularizer": null, 
        "activity_regularizer": null, 
        "activation": "linear", 
        "units": 32, 
        "use_bias": true, 
        "bias_constraint": null, 
        "kernel_initializer": { 
         "config": { 
          "distribution": "uniform", 
          "seed": null, 
          "mode": "fan_avg", 
          "scale": 1.0 
         }, 
         "class_name": "VarianceScaling" 
        }, 
        "trainable": true, 
        "kernel_constraint": null 
       }, 
       "name": "dense_2", 
       "inbound_nodes": [ 
        [ 
         [ 
          "input_2", 
          0, 
          0, 
          {} 
         ] 
        ] 
       ], 
       "class_name": "Dense" 
      } 
     ] 
    }, 
    "keras_version": "2.0.3", 
    "class_name": "Model", 
    "backend": "tensorflow" 
} 
+0

是的,它是空的。我應該寫些什麼?在那段時間,我應該寫什麼? – user21063

+0

是的,它是空的。那麼,我應該寫什麼? – user21063

+0

它應該包含JSON格式的模型配置。查看更新後的答案,舉個例子。 – mhawke