سلام
من خیلی وقت هست که با تنسورفلو کار نکردم اما مواردی که به چشمم میاد رو عرض کنیم . عزیزانی که با تنسورفلو وارد تر هستن انشاءالله اگه نکته تکمیلی هست عنوان کنن .
در مورد placeholder ها منظور این خط ها هستن ؟ :
# Input data.
tf_train_dataset = tf.placeholder(tf.float32, shape=(None, 111, 111, 111, 1))
tf_train_labels = tf.placeholder(tf.float32, shape=(None, num_labels))
اینها همونطور که مشخصه برای ارائه ترینینگ ست شما به شبکه مورد استفاده قرار میگیرن . تو خط 130 هموطنور که در زیر میبینید :
for epch in xrange(0, epochs):
print ('EPOCH %d' % epch)
for step in range(steps_per_epoch):
offset = (step * batch_size) % (Y.shape[0] - batch_size)
# Generate a minibatch.
batch_data = X[np.arange(offset,(offset + batch_size))].astype('float32')
batch_labels = Y[offset:(offset + batch_size), :]
train_step.run(feed_dict={tf_train_dataset: batch_data, tf_train_labels: batch_labels})
در هر ایپاک (که خودش شامل یک یا چند تکرار میشه) mini batch ها تولید شده و بعد به این Placeholder ها انتساب داده میشه و از این طریق شبکه رو تغذیه میکنید.
بنظر میاد بخاطر اندازه داده ورودی، بجای استفاده از فیلتر 11×11 از 9×9 استفاده کرده و همینطور یک پولینگ رو هم حذف کرده تا در انتهای شبکه ابعاد مورد نظرش وجود داشته باشه.
در خط 6 ام همونطور که میبینید ابعاد ورودی رو لحاظ کرده . یعنی
# Path to 3d tensor. Tensor.shape is (111,111,111)
شما باید ابعاد تصاویر مورد نظرتون رو در خط 10 ام لحاظ کنید :
X = np.load(tensor_path + 'x.npz')['x'].reshape((-1, 111, 111, 111, 1))
در مورد اینکه معماری های دیگه چیکار باید بکنید یا کدومها معتبر هستند یک خود مقاله هست و نویسنده مقاله که تو اکانت خودش معرفی میکنه.(پروفایلش اسمش وجود داره و بر اساس مقاله چک میکنید یا از طریق لینکی که در مقاله هست راهنمایی میشید) یا اینکه خیلی راحت به star و یا تعداد fork ها نگاه کنید. اینها ملاک های بسیار خوبی برای میزان اعتبار یک ریپازیتوری هستن. نهایتا هر زمان هم مشکلی داشتید از بین چندتا و اینها کمکی نکرد میتونید سوال بپرسید راهنمایی میکنیم .