TensorFlow.Keras代码在Jupyter Notebook中仅首次运行正常的问题求助
TensorFlow.Keras代码在Jupyter Notebook中仅首次运行正常的问题求助
我最近碰到个棘手的问题:在Jupyter Notebook里用tensorflow.keras搭建神经网络拟合真实数据,第一次运行代码完全正常,能顺利生成符合要求的模型,但第二次再运行时,不管我把成功标准(代码里的NSE_cut)调得多低,都找不到合适的拟合模型了。更奇怪的是没有任何报错信息,代码看起来和第一次运行时一样正常执行,就是死活拟合不出结果。
现在我只能重启Jupyter的内核才能让代码重新生成模型,但这样会清空之前所有的数据和处理结果。更关键的是,我需要给不同处理程度的输入数据(比如无平滑、轻微平滑、重度平滑等)分别建模,对比哪个效果最好,总不能每次建模都重启内核吧?
我到底哪里操作错了?为什么代码只有第一次运行能生成有效模型?
附上我的代码:
### --- Calculate Neural Network fit for modes --- ### def nn_fit(reof_ds, q, NSE_cut): indx_qual_mode = [] best_model = [] best_score = [] best_nse = 0 # ----- Train Tensorflow Hydro-to-TPC models mode-by-mode ----- for mode in reof_ds.mode.values: keras.backend.clear_session() print('Building models for mode-'+str(mode).zfill(2)) tpc = reof_ds.temporal_modes.sel(mode=int(mode)) X = q.values.reshape(len(q),1) Y = tpc.values.reshape(len(q),1) X_train = X Y_train = Y # -- adapt function is to get the mean and STD used to normalize the input data of the model -- normalizer.adapt(X_train) # ----- Construct the model and get summary ----- model = build_and_compile_model(normalizer) #if vis_tf_nn==0: #elif vis_tf_nn==1: # plot_model(model, to_file='NOAA_WF\\hydro2rtpc_mdl\\'+data_src+'\\site-'+str(gaugeID_list[site])+'_tpc'+str(mode+1).zfill(2)+'.png', show_shapes=True, show_layer_names=True) # ----- Fit the model ----- train_proc = model.fit( X_train, Y_train, callbacks=[callback], batch_size=32, epochs=200, verbose=0, #validation_split=0.2 ) # ----- Plot model estimation and original scatter plot ----- X_sim = tf.linspace(np.amin(X), np.amax(X), X.size*10^10) Y_sim = model.predict(X_sim) # ----- The second-time REOF mode screening based on quality of regression models. If qualified, export trained model ----- Y_mdl = model.predict(X[:,0]) nse = 1 - ( (np.nansum(np.square( Y - Y_mdl ))) / (np.nansum(np.square( Y - np.nanmean(Y) ))) ) if nse >= NSE_cut: # Moriasi et al., 2007. Consider NSE>0.5 as satisfactory model.summary() print(mode, nse) # ----- Plot training progress ----- plot_loss(train_proc) best_nse = nse best_score.append(best_nse) best_model.append(model) indx_qual_mode.append(mode) fig = plt.figure() ax = fig.add_axes([0,0,1,1]) plt.scatter(X, Y) plt.plot(X_sim, Y_sim, color='r') plt.xlabel('discharge (m3/d)') plt.ylabel(f"mode {mode}") plt.xticks(rotation=45, ha='right') plt.yticks(rotation=45) plt.legend(['NN-Model','Data'],loc='upper left') plt.text(0.2,0.5,'NSE: '+"{:.2f}".format(nse), transform=ax.transAxes) plt.savefig('test.png', dpi=300, bbox_inches='tight') plt.show() # ----- Export trained model ----- #best_model.save('test.keras') # ADDED by Knicely del Y_mdl, X_sim, Y_sim, X, Y, X_train, Y_train, train_proc, model keras.backend.clear_session() return(best_model, indx_qual_mode)
注:reof_ds包含旋转经验正交函数分解得到的空间和时间模态。
备注:内容来源于stack exchange,提问作者Kas Knicely
相关产品推荐
相关产品推荐

