2017-05-17 6 views
7

मैं तंत्रिका नेटवर्क बनाने और चलाने के लिए टेन्सोरफ्लो बैकएंड के साथ केरा का उपयोग कर रहा हूं। मुझे हानि फ़ंक्शन में मेरे आउटपुट टेंसर पर एक numpy फ़ंक्शन का उपयोग करने की आवश्यकता है। अधिक विशेष रूप से, मेरे हानि समारोह में निकटतम पड़ोसियों को ढूंढना शामिल है, और मुझे इस उद्देश्य के लिए ckdTree के लिए केरास कार्यक्षमता का उपयोग करने की आवश्यकता है। मैंने K.eval() का उपयोग करके अपने आउटपुट टेंसर को एक numpy सरणी में परिवर्तित करने का प्रयास किया है। हालांकि, जब मैं मॉडल को संकलित करने का प्रयास करता हूं तो यह InvalidArgument त्रुटि फेंकता है, मुझे विश्वास है, क्योंकि आप प्रतीकात्मक चर पर eval() नहीं चला सकते हैं।हानि फ़ंक्शन में कैरेक्टर टेंसर पर numpy फ़ंक्शंस का उपयोग कैसे करें?

यहां एक खिलौना कोड स्निपेट है जो इस त्रुटि को पुन: उत्पन्न करता है।

import numpy as np 
from keras import backend as K 
from keras.models import Sequential 
from keras.layers.core import Flatten, Dense, Reshape 
from keras.optimizers import Adam 

def loss(y_true, y_pred): 

    y_pred_numpy = K.eval(y_pred) 
    # perform some numpy operations on y_pred_numpy 
    return K.constant(0) 

''' Model ''' 

input_shape = (10,10,10,3) 
train_images = np.zeros((1,10,10,10,3)) 
train_labels = np.zeros((1,1,1,1,3)) 

model = Sequential() 
model.add(Flatten(input_shape=input_shape)) 
model.add(Dense(3000, use_bias=True, bias_initializer='zeros')) 
model.add(Reshape((10,10,10,3))) 
model.summary() 

opt = Adam(lr=1E-4) 
model.compile(optimizer=opt, loss=loss) 

ऊपर निम्न त्रुटि देता है:

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'flatten_3_input' with dtype float 
    [[Node: flatten_3_input = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/gpu:0"]()]] 
    [[Node: reshape_3/Reshape/_11 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_20_reshape_3/Reshape", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"]()]] 

मैं Keras का उपयोग कर (जटिल) numpy कार्यक्षमता के पुनर्लेखन के लिए बिना Keras tensors के साथ कैसे तो काम करते हैं?

+0

यह वास्तव में नुकसान समारोह में एक समस्या है ??? क्या आपने 'loss = 'mse'' के साथ संकलन करने का प्रयास किया है? - हालांकि यहां तक ​​कि, मैं नहीं यकीन है कि keras tensors के साथ संचालन numpy स्वीकार करेंगे हूँ। :( –

+0

क्या आप पर एक नजर है [इस सवाल] (https://stackoverflow.com/questions/39921607/how-to-make-a-custom-activation-function-with-only-python-in-tensorflow) पहले से? –

उत्तर

1

इस numpy फ़ंक्शन का प्रत्यक्ष उपयोग असंभव है - क्योंकि यह Tensorflow और न ही Theano में लागू नहीं किया गया है। इसके अलावा - tensors और arrays के बीच कोई प्रत्यक्ष पत्राचार नहीं है। Tensors को बीजगणितीय चर के रूप में समझा जाना चाहिए जबकि संख्याओं के रूप में numpy सरणी। tensor एक अमूर्त चीज़ है और numpy कार्यों को लागू करना आम तौर पर असंभव है।

लेकिन आप अभी भी keras.backend कार्यों का उपयोग कर अपने दम पर इस समारोह reimplement की कोशिश कर सकते। फिर आप वैध tensor संचालन का उपयोग करेंगे और कोई समस्या नहीं उठाई जानी चाहिए।

संबंधित मुद्दे