В настоящее время я пытаюсь заставить Сеть учиться предсказывать единичный круг (длина вектора до точки <1, например <a href="https://i.stack.imgur.com/utjKd.png" rel="nofollow noreferrer"> белый круг ). Я не уверен, что вход правильный (даже если «ожидаемый» график правильный), потому что я получаю странные выводы , когда закончил с обучением.
Сеть: 2 входа (х , y) 4 скрытых 1 выхода (значение серого)
См. код ниже, например, для keras:
import math
import matplotlib.pyplot as plt
import numpy
from keras.models import Sequential
from keras.layers import Dense
#init values
a = 100 #diagramsize/2
X = numpy.zeros(((2*a+1)**2,2))
y = numpy.zeros(((2*a+1)**2))
########################################creation of circle data
n=0
for i in range(-a,a+1):
for j in range(-a,a+1):
X[n] = [2*i/a,2*j/a]
out = ((((2*i/a)**2)+((2*j/a)**2))**0.5)
if out < 1:
y[n] = 1
else:
y[n] = 0
n += 1
###################################################
#creating plotable data
test_img = [[0 for col in range(2*a+1)] for row in range(2*a+1)]
for i in range(len(X)):
test_img[int((X[i][0]*a/2+a))][int((X[i][1]*a/2+a))] = y[i]
#plot data
#creates "white circle"
plt.imshow(test_img, cmap='gray')
plt.show(block = False)
plt.pause(0.001) #show true values
# define the keras model
model = Sequential()
model.add(Dense(4, input_dim=2, activation='sigmoid'))
model.add(Dense(1, activation='sigmoid'))
# compile the keras model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# fit the keras model on the dataset
model.fit(X, y, epochs=100, batch_size=2000) #batch big, else error occurs
#predict values
tested = model.predict(X)
#for contrast
tested[0][0] = 1
tested[1][0] = 0
#create new image from data
for i in range(len(X)):
test_img[int((X[i][0]*a/2+a))][int((X[i][1]*+a))] = tested[i][0]
#plot new image
plt.imshow(test_img, cmap='gray')
plt.show(block = False)
plt.pause(0.001) #show true values