Tensorflow实现训练数据的加载—模型搭建训练保存—模型调用和加载全流程

1.Tesorflow训练模型的数据加载

  •  将tensorflow的训练数据数组(矩阵)保存为.npy的数据格式。为后续的模型训练提供便捷的方法。例如如下:
import numpy as np
x=np.random.rand(100,7,9)#x是训练数据,这有100条数据,每一条有7*9个特征
np.save(r"C:\结果\y_train_feature.npy",feature)#feature是训练数据矩阵
  •  加载.npy训练数据和测试数组(矩阵),加载后需要调整数据的形状以满足设计模型的输入输出需求,不然无法训练模型。
import numpy as np

 '''加载训练和测试数据'''
y_train_feature=np.load('C:\结果\y_train_feature.npy')
y_test_feature=np.load('C:\结果\y_test_feature.npy')

'''加载训练和测试的标签'''
y_train=np.load('C:\结果\y_train.npy')
y_test=np.load('C:\结果\y_test.npy')
    
'''调整数据为模型输入输出所需要的形状'''
y_test_feature=y_test_feature.reshape(-1,7,129)
y_train_feature=y_train_feature.reshape(-1,7,129)
y_test=y_test.reshape(-1,129)
y_train=y_train.reshape(-1,129)
  

 2.Tensorflow模型搭建的训练和保存

  • 这里可以采用自定义层和tensorflow的API搭建网络模型,以API为例子搭建多层LSTM网络模型用于训练。
import tensorflow as tf
from tensorflow import  keras
from keras.models import  Model
from keras.layers import Input, MaxPooling1D,Dense, Conv1D, Conv2D, Dropout, Flatten,\
 BatchNormalization, Reshape, Activation, concatenate,SeparableConv2D,LSTM,GRU,Conv2DTranspose,SimpleRNN
from keras.layers.pooling import MaxPooling2D


 '''模型输入'''
input_feature = Input(shape=y_train_feature.shape[1:], name='input_feature')

  '''模型搭建LSTM'''
fc1=LSTM(512,return_sequences=True)(input_feature)
fc2=LSTM(512,return_sequences=True)(fc1)
fc3=LSTM(512,return_sequences=True)(fc2)
fc4=LSTM(512)(fc3)
'''全连接的输出层'''
output_2 = Dense(129,activation='linear',kernel_initializer='random_uniform',\
                     bias_initializer='random_uniform',name='output1')(fc4)
   """以Model来组合整个网络"""
model = Model(inputs= input_feature, outputs=output_2)
model.summary()#察看网络架构
  •  tensorflow模型的训练,优化器的选择,损失函数的设置,批量大小,学习率大小,训练epoch次数,最优模型的保存等操作。
adam=Adam(lr=0.0001,decay=1e-6)#优化器的选择
model.compile(optimizer=adam,
          loss='mae',#均方误差
          metrics=['mae'])#平均绝对误差
'''训练网络'''

earlyStopping = callbacks.EarlyStopping(monitor='val_mae',patience=5,mode='min')

#保存模型的路径
filepath = "weights-improvement-{epoch:02d}-{val_mae:.2f}.h5"


#在每个训练期(epoch)后保存模型
#period:检查点之间的间隔(epoch数)
checkpoint = callbacks.ModelCheckpoint(filepath, monitor='val_mae', verbose=1, save_best_only=True,
                            mode='min',save_weights_only=False,period=1)

print('Training------')
   
model.fit(y_train_feature,y_train,epochs=800,batch_size=128,verbose=1,validation_data=(y_test_feature,y_test),shuffle=True,callbacks=[earlyStopping,checkpoint])

model.save(r'new_models_ripleinputV7.h5')

 3.Tensorflow模型的调用

  • 训练好并保存后的模型,调用时可以采用 load_model() 方法获得保存后的模型。
from keras.models import load_model
import numpy as np

model = tf.keras.models.load_model(r"保存模型的路径\LSTM.h5")
'''输入数据获得模型输出结果'''
output=model.predict(input_feature)#input_feature形状需要满足模型输入的形状要求

'''将张量形式的输出转化为numpy数组的形式'''
output=np.array(output)

4.整体代码实现

  • tensorflow网络模型的训练完整实现(API网络搭建)的形式。自定义的网络模型可采用同样的方法训练模型。
# -*- coding: utf-8 -*-
"""
Created on Sat Sep 11 19:47:21 2021

@author: 茶墨先生
"""

'''导入需要的包'''
import tensorflow as tf
from tensorflow import  keras
from tensorflow.keras import  layers,Sequential,datasets
from keras import regularizers,callbacks 
tf.compat.v1.disable_eager_execution()
from keras import backend as K
from keras.datasets import mnist
from keras.optimizers import Adam
import numpy as np
from keras.models import  Model
from keras.layers import Input, MaxPooling1D,Dense, Conv1D, Conv2D, Dropout, Flatten,\
 BatchNormalization, Reshape, Activation, concatenate,SeparableConv2D,LSTM,GRU,Conv2DTranspose,SimpleRNN
from keras.layers.pooling import MaxPooling2D
  
#自定义模型
'''训练'''
def Train():
    '''加载训练数据'''
    y_train_feature=np.load('C:\结果\y_train_speech_feature.npy')
    y_test_feature=np.load('C:\结果\y_test_speech_feature.npy')
    y_train=np.load('C:\结果\y_train.npy')
    y_test=np.load('C:\结果\y_test.npy')
    
    y_test_feature=y_test_feature.reshape(-1,7,129)
    y_train_feature=y_train_feature.reshape(-1,7,129)
    y_test=y_test.reshape(-1,129)
    y_train=y_train.reshape(-1,129)
    print("y_train: ",y_train.shape)
    print("y_train_speech_feature: ", y_train_feature.shape)
    
    
    '''构建需要的网络模型'''
    input_feature = Input(shape=y_train_feature.shape[1:], name='input_feature')
    fc1=LSTM(512,return_sequences=True)(input_feature)
    fc2=LSTM(512,return_sequences=True)(fc1)
    fc3=LSTM(512,return_sequences=True)(fc2)
    fc4=LSTM(512)(fc3)
    output_2 = Dense(129,activation='linear',kernel_initializer='random_uniform',\
                     bias_initializer='random_uniform',name='output1')(fc4)
    """以Model来组合整个网络"""
    model = Model(inputs= input_feature, outputs=output_2)
    model.summary()
    
    adam=Adam(lr=0.0001,decay=1e-6)
    model.compile(optimizer=adam,
              loss='mae',#均方误差
              metrics=['mae'])#平均绝对误差
    '''训练网络'''
    
    earlyStopping = callbacks.EarlyStopping(monitor='val_mae',patience=5,mode='min')
    
    #保存模型的路径
    filepath = "weights-improvement-{epoch:02d}-{val_mae:.2f}.h5"
    
    
    #在每个训练期(epoch)后保存模型
    #period:检查点之间的间隔(epoch数)
    checkpoint = callbacks.ModelCheckpoint(filepath, monitor='val_mae', verbose=1, save_best_only=True,
                                mode='min',save_weights_only=False,period=1)
    
    print('Training------')
   
    model.fit(y_train_feature,y_train,epochs=800,batch_size=128,verbose=1,validation_data=(y_test_feature,y_test),shuffle=True,callbacks=[earlyStopping,checkpoint])
    
    model.save(r'new_models_ripleinputV7.h5')

'''主函数调用'''
if __name__ =='__main__':
    
    '''训练'''
    Train()


    



读书,生活,旅行。感谢关注和支持!

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是用TensorFlow2.0实现波士顿房价数据集分为训练集、验证集和测试集,进行线性回归模型搭建、交叉验证、模型保持和新数据预测的代码: ```python import tensorflow as tf from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler # 加载数据集 boston = load_boston() x, y = boston.data, boston.target # 数据标准化 scaler = StandardScaler() x = scaler.fit_transform(x) # 划分数据集 x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42) x_train, x_val, y_train, y_val = train_test_split(x_train, y_train, test_size=0.25, random_state=42) # 数据集转换为Tensorflow的Dataset格式 train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train)) val_dataset = tf.data.Dataset.from_tensor_slices((x_val, y_val)) test_dataset = tf.data.Dataset.from_tensor_slices((x_test, y_test)) # 设置批次大小 batch_size = 32 # 对训练集进行乱序、分批处理 train_dataset = train_dataset.shuffle(buffer_size=len(x_train)).batch(batch_size) # 对验证集和测试集分批处理 val_dataset = val_dataset.batch(batch_size) test_dataset = test_dataset.batch(batch_size) # 搭建线性回归模型 model = tf.keras.models.Sequential([ tf.keras.layers.Dense(1, input_shape=(13,)) ]) # 编译模型 model.compile(optimizer=tf.keras.optimizers.Adam(), loss='mse', metrics=['mae']) # 训练模型 history = model.fit(train_dataset, epochs=100, validation_data=val_dataset) # 交叉验证 scores = model.evaluate(test_dataset) print('Test loss:', scores[0]) print('Test mae:', scores[1]) # 模型保存 model.save('boston.h5') # 新数据预测 test_data = x_test[:10] predictions = model.predict(test_data) print('Predictions:', predictions.flatten()) print('True values:', y_test[:10]) ``` 其中,通过`train_test_split`函数将原始数据集分为训练集、验证集和测试集。`StandardScaler`用于数据标准化处理。然后,将数据集转换为Tensorflow的`Dataset`格式,并设置批次大小。使用`tf.keras.models.Sequential`搭建线性回归模型,使用Adam优化器,均方误差损失函数和平均绝对误差指标。调用`fit`方法训练模型,并在验证集上进行验证。使用`evaluate`方法进行交叉验证。使用`save`方法保存模型。最后,使用模型对新数据进行预测。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值