import tensorflow as tf from tensorflow import keras import numpy as np import os import sys from data import data os.makedirs('./runs', exist_ok=True) os.makedirs('./imgs', exist_ok=True) dex=0 if len(sys.argv)>1: dex=int(sys.argv[1]) seed=np.random.randint(100000) x=data(1000) np.random.seed(12) X=data(10000) np.random.seed(seed) inp=keras.layers.Input(shape=x.shape[1:]) q=inp q=keras.layers.Dense(5,activation='relu')(q) q=keras.layers.Dense(5,activation='relu')(q) q=keras.layers.Dense(1,activation='linear')(q) model=keras.models.Model(inputs=inp,outputs=q) model.compile(optimizer='adam',loss='mse') model.fit(x,np.ones(len(x)), epochs=500, batch_size=25, validation_split=0.2, verbose=1, shuffle=True, callbacks=[keras.callbacks.EarlyStopping(monitor='val_loss',patience=10)]) #Evaluation phase x=X p=model.predict(x) mp=np.mean(p) d=(p-mp)**2 d=np.sqrt(np.mean(d,axis=-1)) np.savez_compressed(f"runs/{dex}",d=d,x=x,p=p,mp=mp) sx=[(xx,dd) for xx,dd in zip(x,d)] sx.sort(key=lambda x:x[1]) print(sx[0],sx[-1]) sx=[xx for xx,dd in sx] sx=np.array(sx) from plt import plt col1=[1.0,0.0,0.0] col2=[0.0,1.0,0.0] col1,col2=np.array(col1),np.array(col2) ln=len(sx) cols=[col1*(i/ln)+col2*(1-i/ln) for i in range(ln)] plt.scatter(sx[:,0],sx[:,1],c=cols) plt.savefig(f"imgs/{dex}.png") #plt.plot(sx[:,0],sx[:,1],'.') plt.how()