สวัสดี ฉันต้องการข้อกำหนดการทำให้เป็นมาตรฐานที่กำหนดเองเพื่อเพิ่มลงในฟังก์ชันการสูญเสีย (เอนโทรปีข้ามไบนารี) ของฉัน ใครสามารถช่วยฉันเกี่ยวกับไวยากรณ์ Tensorflow เพื่อใช้งานสิ่งนี้ได้บ้าง ฉันทำให้ทุกอย่างง่ายขึ้นมากที่สุดเท่าที่จะเป็นไปได้เพื่อจะได้ช่วยฉันได้ง่ายกว่า
โมเดลใช้ชุดข้อมูล 10,000 ของการกำหนดค่าไบนารี 18 x 18 เป็นอินพุต และมีการกำหนดค่า 16x16 ที่ตั้งเป็นเอาต์พุต โครงข่ายประสาทเทียมประกอบด้วยชั้น Convlutional เพียง 2 ชั้นเท่านั้น
โมเดลของฉันมีลักษณะดังนี้:
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
EPOCHS = 10
model = models.Sequential()
model.add(layers.Conv2D(1,2,activation='relu',input_shape=[18,18,1]))
model.add(layers.Conv2D(1,2,activation='sigmoid',input_shape=[17,17,1]))
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-3),loss=tf.keras.losses.BinaryCrossentropy())
model.fit(initial.reshape(10000,18,18,1),target.reshape(10000,16,16,1),batch_size = 1000, epochs=EPOCHS, verbose=1)
output = model(initial).numpy().reshape(10000,16,16)
ตอนนี้ฉันเขียนฟังก์ชันที่ฉันต้องการใช้เป็นเงื่อนไขการทำให้เป็นมาตรฐานเพิ่มเติมเพื่อใช้เป็นเงื่อนไขการทำให้เป็นมาตรฐาน ฟังก์ชันนี้รับค่าจริงและการทำนาย โดยพื้นฐานแล้ว มันจะทวีคูณทุกจุดของทั้งสองอย่างด้วยเพื่อนบ้านที่ 'ถูกต้อง' จากนั้นนำความแตกต่าง ฉันคิดว่าคำจริงและการทำนายคือ 16x16 (ไม่ใช่ 10,000x16x16) สิ่งนี้ถูกต้องหรือไม่?
def regularization_term(prediction, true):
order = list(range(1,4))
order.append(0)
deviation = (true*true[:,order]) - (prediction*prediction[:,order])
deviation = abs(deviation)**2
return 0.2 * deviation
ฉันขอขอบคุณความช่วยเหลือในการเพิ่มบางอย่างเช่นฟังก์ชันนี้เป็นเงื่อนไขการทำให้เป็นมาตรฐานสำหรับการสูญเสียของฉันในการช่วยโครงข่ายประสาทเทียมในการฝึกปฏิสัมพันธ์ 'เพื่อนบ้านที่ถูกต้อง' ให้ดีขึ้น ฉันรู้สึกลำบากมากกับการใช้ฟังก์ชัน Tensorflow ที่ปรับแต่งได้มาก ขอบคุณ ชื่นชมมาก