training now terminates earlier when stagnating (can be disabled via
flag)
This commit is contained in:
parent
787404c134
commit
f3240147d5
12
caliGraph.py
12
caliGraph.py
@ -638,7 +638,7 @@ def recommendNBooksTagBased(G, mu, std, n, removeTopListsB=True):
|
|||||||
|
|
||||||
def recommendNBooks(G, mu, std, n, removeTopListsB=True, removeUselessRecommenders=True):
|
def recommendNBooks(G, mu, std, n, removeTopListsB=True, removeUselessRecommenders=True):
|
||||||
removeRestOfSeries(G)
|
removeRestOfSeries(G)
|
||||||
removeBad(G, mu-std*2-1)
|
removeBad(G, mu-std-1)
|
||||||
removeKeepBest(G, int(n*2) + 5, maxDistForRead=2)
|
removeKeepBest(G, int(n*2) + 5, maxDistForRead=2)
|
||||||
removeEdge(G)
|
removeEdge(G)
|
||||||
removeHighSpanTags(G, 12)
|
removeHighSpanTags(G, 12)
|
||||||
@ -812,7 +812,7 @@ def evaluateFitness(books, debugPrint=False):
|
|||||||
print(sum(errSq)/len(errSq), 0.005*regressionLoss, 0.2*boundsLoss/len(ratedBooks), 1.0*sum(linSepLoss)/len(linSepLoss))
|
print(sum(errSq)/len(errSq), 0.005*regressionLoss, 0.2*boundsLoss/len(ratedBooks), 1.0*sum(linSepLoss)/len(linSepLoss))
|
||||||
return sum(errSq)/len(errSq) + 0.005*regressionLoss + 0.2*boundsLoss/len(ratedBooks) - 1.0*sum(linSepLoss)/len(linSepLoss)
|
return sum(errSq)/len(errSq) + 0.005*regressionLoss + 0.2*boundsLoss/len(ratedBooks) - 1.0*sum(linSepLoss)/len(linSepLoss)
|
||||||
|
|
||||||
def train(gamma = 1):
|
def train(gamma = 1, maxEmptySteps=-1):
|
||||||
global weights
|
global weights
|
||||||
books = loadBooksFromDB()
|
books = loadBooksFromDB()
|
||||||
bestWeights = copy.copy(weights)
|
bestWeights = copy.copy(weights)
|
||||||
@ -820,6 +820,7 @@ def train(gamma = 1):
|
|||||||
w = list(weights.keys())
|
w = list(weights.keys())
|
||||||
attr = random.choice(w)
|
attr = random.choice(w)
|
||||||
delta = gamma * (-0.5 + (0.75 + 0.25*random.random()))
|
delta = gamma * (-0.5 + (0.75 + 0.25*random.random()))
|
||||||
|
emptyStepsLeft = maxEmptySteps
|
||||||
|
|
||||||
while gamma > 1.0e-08:
|
while gamma > 1.0e-08:
|
||||||
print({'mse': best_mse, 'w': weights, 'gamma': gamma})
|
print({'mse': best_mse, 'w': weights, 'gamma': gamma})
|
||||||
@ -841,11 +842,15 @@ def train(gamma = 1):
|
|||||||
delta *= 2
|
delta *= 2
|
||||||
if random.random() < 0.10:
|
if random.random() < 0.10:
|
||||||
attr = random.choice(w)
|
attr = random.choice(w)
|
||||||
|
emptyStepsLeft = maxEmptySteps
|
||||||
else:
|
else:
|
||||||
weights = copy.copy(bestWeights)
|
weights = copy.copy(bestWeights)
|
||||||
gamma *= 0.8
|
gamma *= 0.8
|
||||||
attr = random.choice(w)
|
attr = random.choice(w)
|
||||||
delta = gamma * (-0.5 + (0.75 + 0.25*random.random()))
|
delta = gamma * (-0.5 + (0.75 + 0.25*random.random()))
|
||||||
|
emptyStepsLeft -= 1
|
||||||
|
if emptyStepsLeft == 0:
|
||||||
|
return
|
||||||
|
|
||||||
def saveWeights(weights):
|
def saveWeights(weights):
|
||||||
with open('neuralWeights.json', 'w') as f:
|
with open('neuralWeights.json', 'w') as f:
|
||||||
@ -887,13 +892,14 @@ def cliInterface():
|
|||||||
|
|
||||||
p_train = cmds.add_parser('train', description="TODO", aliases=[])
|
p_train = cmds.add_parser('train', description="TODO", aliases=[])
|
||||||
p_train.add_argument('-g', type=float, default=1, help='learning rate gamma')
|
p_train.add_argument('-g', type=float, default=1, help='learning rate gamma')
|
||||||
|
p_train.add_argument('--full', action="store_true")
|
||||||
|
|
||||||
p_full = cmds.add_parser('full', description="TODO", aliases=[])
|
p_full = cmds.add_parser('full', description="TODO", aliases=[])
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
if args.cmd=="train":
|
if args.cmd=="train":
|
||||||
train(args.g)
|
train(args.g, -1 if args.full else 32)
|
||||||
exit()
|
exit()
|
||||||
|
|
||||||
G, books = buildFullGraph()
|
G, books = buildFullGraph()
|
||||||
|
Loading…
Reference in New Issue
Block a user