赞
踩
import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split iris = load_iris() x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.2,random_state=23) X_train,X_valid,y_train,y_valid = train_test_split(x_train,y_train,test_size=0.2,random_state=12) import tensorflow as tf from tensorflow import keras #创建了一个输入层inputs,其形状与X_train的形状(除了第一个维度,即样本数量)相同。 inputs = keras.layers.Input(shape=X_train.shape[1:]) #添加了一个隐藏层hidden1,它包含300个神经元,并使用ReLU激活函数。 hidden1 = keras.layers.Dense(300,activation='relu')(inputs) hidden2 = keras.layers.Dense(100,activation='relu')(hidden1) concat = keras.layers.concatenate([inputs,hidden2]) output = keras.layers.Dense(10,activation='softmax')(concat) model_fun_WideDeep = keras.models.Model(inputs=[inputs],outputs=[output]) model_fun_WideDeep.summary() #观察神经网络的整体情况
运行结果:
注:在这个模型中,inputs层代表了宽度的特征,而hidden1和hidden2层代表了深度的特征。通过将输入层和第二个隐藏层的输出拼接在一起,模型结合了宽度和深度的特征,以提高模型的预测能力。
#利用.compile()与.fit()函数对数据进行编译与训练
model_fun_WideDeep.compile(loss='sparse_categorical_crossentropy',optimizer='sgd',metrics=["accuracy"])
h=model_fun_WideDeep.fit(X_train,y_train,batch_size=32,epochs=30,validation_data=(X_valid,y_valid))
运行结果:
注:optimizer=‘sgd’:这是模型训练时使用的优化器。sgd代表随机梯度下降(Stochastic Gradient Descent),它是一种简单的优化算法,用于在训练过程中更新模型的权重。
X_train_A, X_train_B = X_train[:, :200], X_train[:, 100:] X_valid_A, X_valid_B = X_valid[:, :200], X_valid[:, 100:] # 定义输入层 input_A = keras.layers.Input(shape=X_train_A.shape[1]) input_B = keras.layers.Input(shape=X_train_B.shape[1]) # 定义隐藏层和输出层 hidden1 = keras.layers.Dense(300, activation='relu')(input_B) hidden2 = keras.layers.Dense(100, activation='relu')(hidden1) concat = keras.layers.concatenate([input_A, hidden2]) output = keras.layers.Dense(10, activation='softmax')(concat) # 创建模型 model_fun_MulIn = keras.models.Model(inputs=[input_A, input_B], outputs=[output]) # 编译模型 model_fun_MulIn.compile(loss='sparse_categorical_crossentropy',optimizer='sgd',metrics=["accuracy"]) # 训练模型 h=model_fun_MulIn.fit((X_train_A,X_train_B),y_train,batch_size=32,epochs=10, validation_data=((X_valid_A, X_valid_B), y_valid))
运行结果:
注:这段代码将训练数据集X_train和验证数据集X_valid分割成两个子集,分别是X_train_A和X_train_B以及X_valid_A和X_valid_B。每个子集都包含原始数据集的一部分特征。
pd.DataFrame(h.history).plot(figsize=(8, 5))
plt.grid(True)
plt.gca().set_ylim(0, 1)
plt.show()
运行结果:
class Model_sub_fnn(keras.models.Model): def __init__(self, units_1=300, units_2=100, units_out=10, activation='relu'): super().__init__() self.hidden1 = keras.layers.Dense(units_1, activation=activation) self.hidden2 = keras.layers.Dense(units_2, activation=activation) self.main_output = keras.layers.Dense(units_out, activation='softmax') def call(self, data): hidden1 = self.hidden1(data) hidden2 = self.hidden2(hidden1) main_output = self.main_output(hidden2) return main_output #初始化模型 model_sub_fnn = Model_sub_fnn() #通过在初始化中传递参数改变模型元素默认值 model_sub_fnn2 = Model_sub_fnn(300, 100, 10, activation='relu') #编译模型与训练 model_sub_fnn.compile(loss='sparse_categorical_crossentropy',optimizer='sgd',metrics=["accuracy"]) h= model_sub_fnn.fit(X_train,y_train,batch_size=32,epochs=30,validation_data = (X_valid,y_valid)) model_sub_fnn.summary()
运行结果:
pd.DataFrame(h.history).plot(figsize=(8, 5))
plt.grid(True)
plt.gca().set_ylim(0, 1)
plt.show()
运行结果:
注:在这段代码中,我们定义了一个名为Model_sub_fnn的Keras模型类,并在之后实例化了两个模型实例,分别命名为model_sub_fnn和model_sub_fnn2。这两个模型实例的参数值有所不同,这可以通过在实例化时传递不同的参数值来实现。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。