ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
https://github.com/openai/gpt-2/tree/master --- ~~~ import os os.environ['TF_ENABLE_ONEDNN_OPTS'] = '0' import tensorflow as tf from tensorflow.keras.models import load_model, Model from tensorflow.keras.layers import Input, Dense, Dropout from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler, LabelEncoder import numpy as np import pandas as pd # 创建有意义的中文数据 data = { '用户询问': [ '我想查询一下我的账单', '我的网络连接有问题', '你们的服务时间是什么时候', '为什么我的账单金额这么高', '如何解决我的账户登录问题' ], '问题类型': ['账单问题', '技术问题', '一般问题', '账单问题', '技术问题'] } # 创建 DataFrame df = pd.DataFrame(data) # 将问题类型转换为分类编码 df['问题类型'] = pd.Categorical(df['问题类型']).codes # 特征提取: 将用户询问转换为特征向量(例如使用词袋模型) from sklearn.feature_extraction.text import CountVectorizer vectorizer = CountVectorizer() X = vectorizer.fit_transform(df['用户询问']).toarray() # 标签 y = tf.keras.utils.to_categorical(df['问题类型']) # 标准化特征 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) class CustomerServiceBot: def __init__(self): self.models = {} self.scaler = StandardScaler() def add_model(self, model_name, input_shape, output_units): inputs = Input(shape=(input_shape,)) x = Dense(64, activation='relu')(inputs) x = Dropout(0.3)(x) x = Dense(32, activation='relu')(x) x = Dropout(0.3)(x) outputs = Dense(output_units, activation='softmax')(x) model = Model(inputs=inputs, outputs=outputs) model.compile(optimizer=tf.keras.optimizers.Adam(), loss='categorical_crossentropy', metrics=['accuracy']) self.models[model_name] = model def train_model(self, model_name, X_train, y_train, epochs=50, batch_size=32, validation_split=0.2): if model_name in self.models: X_train = self.scaler.fit_transform(X_train) self.models[model_name].fit(X_train, y_train, epochs=epochs, batch_size=batch_size, validation_split=validation_split, verbose=1) else: print(f"Model {model_name} not found.") def evaluate_model(self, model_name, X_test, y_test): if model_name in self.models: X_test = self.scaler.transform(X_test) loss, accuracy = self.models[model_name].evaluate(X_test, y_test, verbose=0) print(f"Test Accuracy of {model_name}: {accuracy:.2f}") else: print(f"Model {model_name} not found.") def predict(self, model_name, sample_data): if model_name in self.models: sample_data_scaled = self.scaler.transform(sample_data) prediction = self.models[model_name].predict(sample_data_scaled) return prediction else: print(f"Model {model_name} not found.") return None # 实例化客户服务机器人 bot = CustomerServiceBot() # 添加文本分类模型 bot.add_model("text_classification", input_shape=X_train.shape[1], output_units=y_train.shape[1]) # 训练文本分类模型 bot.train_model("text_classification", X_train, y_train) # 评估文本分类模型 bot.evaluate_model("text_classification", X_test, y_test) # 示例预测 sample_data = vectorizer.transform(['请问如何查询账单']).toarray() prediction = bot.predict("text_classification", sample_data) print(f"Predicted class probabilities: {prediction}") # 保存模型 for model_name, model in bot.models.items(): model.save(f"{model_name}_model.h5") ~~~ --- ~~~ import os os.environ['TF_ENABLE_ONEDNN_OPTS'] = '0' import tensorflow as tf from tensorflow.keras.models import load_model, Model from tensorflow.keras.layers import Input, Dense, Dropout from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler import numpy as np import pandas as pd """ python.exe -m pip install -i https://mirrors.aliyun.com/pypi/simple --upgrade pip pip install tensorflow -i https://mirrors.aliyun.com/pypi/simple """ # 加载数据并进行预处理 data = pd.read_csv("stock_data.csv") # 替换为你的数据文件路径 features = ['open', 'close', 'volume', 'high', 'low'] target = 'change_percentage' data['label'] = (data[target] > 0).astype(int) X = data[features].values y = data['label'].values scaler = StandardScaler() X = scaler.fit_transform(X) """ X: 特征矩阵,通常是一个二维数组或 DataFrame,包含模型的输入特征。 y: 标签数组,通常是一维数组或 Series,包含模型的目标变量。 test_size: 测试集的比例。0.2 表示将 20% 的数据用作测试集,剩下的 80% 用作训练集。 random_state: 随机种子,确保每次运行都会产生相同的分割结果。42 是一个常见的选择,但可以是任何整数。 """ X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) model_path = "stock_prediction_model.h5" # 检查模型是否存在 if os.path.exists(model_path): print("加载已存在的模型...") model = load_model(model_path) # 新建一个优化器实例 optimizer = tf.keras.optimizers.Adam() model.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['accuracy']) else: print("创建新模型...") # 使用 Functional API 构建模型 inputs = Input(shape=(X_train.shape[1],)) x = Dense(64, activation='relu')(inputs) x = Dropout(0.3)(x) x = Dense(32, activation='relu')(x) x = Dropout(0.3)(x) outputs = Dense(1, activation='sigmoid')(x) model = Model(inputs=inputs, outputs=outputs) optimizer = tf.keras.optimizers.Adam() model.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['accuracy']) # 训练模型 history = model.fit(X_train, y_train, epochs=50, batch_size=32, validation_split=0.2, verbose=1) # 评估模型 loss, accuracy = model.evaluate(X_test, y_test, verbose=0) print(f"Test Accuracy: {accuracy:.2f}") # 模型预测 sample_data = np.array([[150, 155, 300000, 157, 149]]) # 替换为实际数据 sample_data_scaled = scaler.transform(sample_data) buy_probability = model.predict(sample_data_scaled)[0, 0] print(f"Predicted Probability of Increase: {buy_probability:.2f}") # 保存模型 model.save(model_path) ~~~