কিভাবে একটি নেটওয়ার্ক দ্বিতীয় স্তর আউটপুট?


9

আমার মডেলটি ডিজিটের চিত্রগুলিতে প্রশিক্ষণপ্রাপ্ত ( MNIST dataset)। আমি আমার নেটওয়ার্কের দ্বিতীয় স্তরের আউটপুট - 128 সংখ্যার অ্যারে প্রিন্ট করার চেষ্টা করছি।

উদাহরণস্বরূপ - উদাহরণ অনেকটা পড়ার পর এই , এবং এই , বা এই

আমি নিজের নেটওয়ার্কে এটি পরিচালনা করতে পারি নি। সমাধানগুলির কোনওটিই আমার নিজের অ্যালগরিদমের কাজ করে না।

কোলাব-এর লিঙ্ক: https://colab.research.google.com/drive/1MLbpWJmq8JZB4_zKongaHP2o3M1FpvAv?fbclid=IwAR20xRz2i6sFS-Nm6Xwfk5hztdXOuxY4tZaDRXxAXAAA3AA3AXAA3

আমি বিভিন্ন ত্রুটি বার্তা পেয়েছি। আমি তাদের প্রত্যেককে হ্যান্ডেল করার চেষ্টা করেছি, তবে নিজের মতো করে বুঝতে পারি না।

আমি কী মিস করছি? দ্বিতীয় স্তর আউটপুট কিভাবে? আমার আকারটি যদি হয় (28,28)- এর প্রকার ও মানটি কী হওয়া উচিত input_shape?


উদাহরণস্বরূপ ব্যর্থ ট্রায়াল এবং ত্রুটিগুলি:

(1)

for layer in model.layers:

    get_2nd_layer_output = K.function([model.layers[0].input],[model.layers[2].output])
    layer_output = get_2nd_layer_output(layer)[0]
    print('\nlayer output: get_2nd_layer_output=, layer=', layer, '\nlayer output: get_2nd_layer_output=', get_2nd_layer_output)

প্রকারের ত্রুটি: ইনপুটগুলির তালিকা বা টিপল হওয়া উচিত।

(2)

input_shape=(28, 28)
inp = model.input                                           # input placeholder
outputs = [layer.output for layer in model.layers]          # all layer outputs
functor = K.function([inp, K.learning_phase()], outputs )   # evaluation function

# Testing
test = np.random.random(input_shape)[np.newaxis,...]
layer_outs = functor([test, 0.])
print('layer_outs',layer_outs)

tensorflow.python.framework.erferences_impl.FailPreconditionError: কনটেইনার থেকে রিসোর্স ভেরিয়েবল ঘন_1 / পক্ষপাত পড়ার সময় ত্রুটি: লোকালহোস্ট। এর অর্থ এই হতে পারে যে পরিবর্তনশীলটি অবিচ্ছিন্ন করা হয়েছিল। পাওয়া যায় নি: ধারক লোকালহোস্টের অস্তিত্ব নেই। (রিসোর্সটি খুঁজে পাওয়া যায়নি: লোকালহোস্ট / ঘন_1 / পক্ষপাত) [[{{নোড ঘন_1 / বায়াসএড / রিডভেয়ারিবল p}]]]


1
আপনার প্রশ্নের লিঙ্কগুলি নষ্ট হয়েছে, দয়া করে আপনি কী চেষ্টা করেছেন সে সম্পর্কে ধারণা পেতে তাদের যুক্ত করুন
থিও রুবেনাচ

@ থোরুবেনাচ সম্পন্ন করেছেন
শির কে

উত্তর:


3

দেখে মনে হচ্ছে আপনি পুরানো কেরাস (টেনসরফ্লো 2.0: এর আগে import keras) এবং নতুন কেরাস ( from tensorflow import keras) মিশ্রিত করছেন ।

টেনসরফ্লো> = ২.০ এর সাথে পুরানো কেরাস ব্যবহার না করার চেষ্টা করুন (এবং আপনার প্রথম লিঙ্কের মতো পুরানো ডকুমেন্টেশনগুলি উল্লেখ না করার জন্য) এটি সহজেই নতুনটির সাথে বিভ্রান্ত হয়ে পড়েছে (যদিও এটি কঠোরভাবে অযৌক্তিক কিছু নয়):

from tensorflow import keras
from keras.models import Model
print(Model.__module__) #outputs 'keras.engine.training'

from tensorflow.keras.models import Model
print(Model.__module__) #outputs 'tensorflow.python.keras.engine.training'

আচরণটি এই দুটি গ্রন্থাগারের মিশ্রণ করা অত্যন্ত অস্থির হবে।

একবার এটি হয়ে গেলে, আপনি যা চেষ্টা করেছেন তার উত্তরটি ব্যবহার করে আমি আপনার মডেল my_input_shapeহচ্ছি এবং আপনার মডেলগুলির ইনপুটটির আকার হব অর্থাত্ একটি চিত্রের আকার (এখানে (২৮, ২৮) অথবা (১, ২৮, ২৮) যদি আপনার কাছে থাকে ব্যাচ):

from tensorflow import keras as K
my_input_data = np.random.rand(*my_input_shape) 
new_temp_model = K.Model(m.input, m.layers[3].output) #replace 3 with index of desired layer
output_of_3rd_layer = new_temp_model.predict(my_input_data) #this is what you want

আপনার যদি একটি চিত্র থাকে তবে imgআপনি সরাসরি লিখতে পারেনnew_temp_model.predict(img)


রুবেনাচ 'মাই_ইনপুট_শ্যাপ' বলতে কী বোঝ? সেই ভেরির মান কত হওয়া উচিত?
শির কে

1
আপনার মডেলের input_shape=(28, 28)
ইনপুটটির আকারটি ঠিকঠাক,

1
এখানে আমি এলোমেলো ডেটা ব্যবহার করি তবে আপনার ক্ষেত্রে আপনার my_input_dataঅবশ্যই নিজের ডেটা দ্বারা প্রতিস্থাপন করা উচিত
থিও রুবেনাচ

'নিজের ডেটা' বলতে কী বোঝ? ট্রেনিং ডেটা - ভিতরে মানগুলি কী হওয়া উচিত? পরীক্ষার ডাটা? এটি কি কেবলমাত্র 1 টি বস্তু (চিত্র) বা বস্তুর তালিকা / অ্যারে / টুপল (চিত্রগুলি) হওয়া উচিত? আমি এর বিভিন্ন সমন্বয় চেষ্টা করেছি এবং এর কোনওটিই কাজ করে না। আপনি উল্লিখিত হিসাবে আমি যখন 'ইনপুট_শ্যাপ' সেট করি তখন আমি ত্রুটিটি পেয়েছি '' অ্যাট্রিবিউটআরার: 'টিপল' অবজেক্টটির কোনও 'গুণ' আকৃতি নেই '
শির কে

1
আমি সেই অনুযায়ী আমার উত্তর আপডেট করেছি। আপনি যে চিত্রটি ব্যবহার করতে চান তা আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে, কোডের সাথে এর কোনও যোগসূত্র নেই। আপনি যদি এখনও বিভ্রান্ত থাকেন তবে অন্য স্ট্যাকেক্সচেঞ্জ সাইটে নতুন প্রশ্ন জিজ্ঞাসা করতে পারেন?
থিও রুবেনাচ

3

(ধরে নিচ্ছেন টিএফ 2)

আমি মনে করি সবচেয়ে সহজ সরল পদ্ধতিটি আপনার স্তরগুলির নামকরণ করা এবং তারপরে স্ট্যান্ডার্ড ইনপুট দিয়ে তাদের কল করা যাতে আপনার মডেলটি দেখতে দেখতে পারে

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28), name='flatten'),
    keras.layers.Dense(128, activation='relu', name='hidden'),
    keras.layers.Dense(10, activation='softmax')
])

তারপরে একটি ইনপুট তৈরি করুন এবং

my_input = tf.random.normal((1, 28, 28)) # Should be like the standard input to your network
output_of_flatten = model.get_layer('flatten')(my_input)
output_of_hidden = model.get_layer('hidden')(output_of_flatten)

output_of_hidden আপনি যা খুঁজছেন তা

বিকল্প পথ বা পন্থা

যদি আপনি আরও সাধারণ সমাধান সন্ধান করছেন, আপনার মডেলটিকে অনুক্রমিক বলে ধরে নিচ্ছেন, আপনি indexএর get_layerমতো কীওয়ার্ডটি ব্যবহার করতে পারেন

my_input = tf.random.normal((1, 28, 28)) # Should be like the standard input to your network
desired_index = 1  # 1 == second layer

for i in range(desired_index):
    my_input = model.get_layer(index=i)(my_input)

এই লুপ শেষে my_inputআপনি যা খুঁজছেন তা হওয়া উচিত


'আমার_ইনপুট = ... # আপনার নেটওয়ার্কের স্ট্যান্ডার্ড ইনপুটটির মতো হওয়া উচিত' বলতে কী বোঝায়? সেই ভেরির মান কত হওয়া উচিত?
শির কে

1
ক্রমিক মডেলটি যেমন প্রত্যাশা করে তার মতো কোনও স্ট্যান্ডার্ড ইনপুট - যদি আপনার ইনপুটটি 28x28 হয় তবে আপনার একক উদাহরণের জন্য 1x28x28 অ্যারেটি পাস করা উচিত
ব্লুজামার্স

1
আমার উত্তরটির সম্পাদনা করেছেন
ব্লুজামার্স

'আউটপুট_ও_হিডেন' এর মধ্যে কীভাবে মানগুলি প্রিন্ট করা যায়? বর্তমান ফলাফল হ'ল 'আউটপুট_অফ_হিডেন টেনসর ("লুকানো_1 / রিলু: 0", আকৃতি = (1, 128), টাইপ = ফ্ল্যাট 32) "। আমি সেশনটি ব্যবহার করার চেষ্টা করেছি এবং আমি ত্রুটি পেয়েছি।
শির কে

1
যদি output_of_hidden.numpy()টিএফ 2-তে থাকে, আপনার সাধারণত কল করা উচিত এবং এটি এটিকে অদ্ভুত অ্যারে রূপান্তরিত করবে
ব্লুজামার্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.