活动介绍
file-type

TensorFlow深度学习入门指南

PDF文件

下载需积分: 10 | 40.59MB | 更新于2024-07-19 | 80 浏览量 | 6 下载量 举报 收藏
download 立即下载
"headfirst-tensorflow" 这是一本关于TensorFlow和深度学习的教程,旨在帮助读者快速理解和应用TensorFlow这一强大的开源库。TensorFlow是一个数据流图为基础的计算平台,设计用于数值计算,尤其适合处理机器学习和深度神经网络的问题。它的核心理念是将数学操作作为图中的节点,而节点之间的连接,即数据流动,表现为多维数据数组,也就是张量。TensorFlow的灵活性允许在各种硬件环境上运行,包括桌面电脑、服务器、以及移动设备,支持CPU和GPU的计算。 书中首先对深度学习进行了概述,解释了深度学习作为一种模型训练和参数优化的方法在人工智能领域的地位。接着,它介绍了机器学习的基础,这是深度学习的基石。从生物学角度出发,讲解了从生物神经元到人工神经网络的演变,进一步阐述了人工神经网络的基本结构和工作原理。 书中的第四章深入探讨了人工神经网络,分为三个部分,涵盖了神经网络的不同方面。第五章关注Logistic回归和Softmax,这两个是分类问题中的基础模型,对于理解神经网络的输出层至关重要。第六章和第七章分别详细讨论了卷积神经网络(CNN)和循环神经网络(RNN),它们在图像识别和序列数据处理中发挥着关键作用。特别是第七章的LSTM部分,LSTM(长短时记忆网络)是RNN的一个变体,解决了传统RNN在处理长期依赖问题上的挑战。 随着深入到TensorFlow的章节,读者将学习如何使用TensorFlow构建和训练这些复杂的模型。书中提供了实际操作的例子,让读者通过Python API接口与TensorFlow交互,掌握模型构建和训练的过程。最后,书中提到了一个关于深度学习原理和项目实践的系列教程计划,以及作者团队将持续跟踪TensorFlow社区的最新发展,分享实践经验。 本书的目标读者群体包括数据分析专业人士、程序员,以及对深度学习感兴趣的非编码背景的读者。无论读者的背景如何,本书都致力于提供一个从基础知识到实践操作的全面引导,使他们能够快速掌握TensorFlow并应用于实际问题中。

相关推荐

filetype

#!/bin/bash # GPCR 分析流程 - 最新数据库版 # 工作目录: /home/cm/GPCR_project/He/ # CPU 核心数: 8 # 使用最新版数据库 # ===== 配置参数 ===== WORK_DIR="/media/edsb3/disk1/cm/GPCR_project/He" INPUT_FASTA="${WORK_DIR}/proteins.fasta" OUTPUT_DIR="${WORK_DIR}/GPCR_results" CPU=8 # 步骤控制参数 - 设置从哪个步骤开始 (1-6) # 设置为 1 表示从头开始,设置为 2 表示从步骤2开始,以此类推 START_STEP=4 # 初始化 Conda source /home/cm/miniconda3/etc/profile.d/conda.sh conda activate gpcr_analysis # ===== 准备目录 ===== mkdir -p ${OUTPUT_DIR}/{hmmer_results,tmhmm_results,gpcrdb_results,final_results} DB_DIR="${WORK_DIR}/bio_dbs" mkdir -p ${DB_DIR} cd ${WORK_DIR} # ===== 1. Pfam 结构域扫描 ===== if [ $START_STEP -le 1 ]; then echo "=== 步骤1: Pfam 数据库扫描 (使用 ${CPU} 核心) ===" DOMAINS=("PF00001" "PF00002" "PF00003" "PF10324" "PF10328" "PF01534" "PF06814") # 下载最新版 Pfam 数据库 if [ ! -f "${DB_DIR}/Pfam-A.hmm" ]; then echo "下载最新版 Pfam 数据库..." wget -P ${DB_DIR} https://ftp.ebi.ac.uk/pub/databases/Pfam/current_release/Pfam-A.hmm.gz gunzip ${DB_DIR}/Pfam-A.hmm.gz hmmpress ${DB_DIR}/Pfam-A.hmm fi # 创建GPCR结构域子集(增加错误检查) echo "创建GPCR结构域子集..." rm -f ${DB_DIR}/GPCR_domains.hmm* 2>/dev/null for domain in "${DOMAINS[@]}"; do echo "提取结构域: $domain" hmmfetch ${DB_DIR}/Pfam-A.hmm $domain > ${DB_DIR}/${domain}.hmm # 检查是否提取成功 if [ ! -s "${DB_DIR}/${domain}.hmm" ]; then echo "警告: 无法提取结构域 $domain,尝试完整数据库扫描" # 如果提取失败,直接使用完整数据库 cp ${DB_DIR}/Pfam-A.hmm ${DB_DIR}/GPCR_domains.hmm break fi done # 如果所有结构域都提取成功,则合并它们 if [ ! -f "${DB_DIR}/GPCR_domains.hmm" ]; then cat ${DB_DIR}/PF*.hmm > ${DB_DIR}/GPCR_domains.hmm fi # 创建索引 hmmpress ${DB_DIR}/GPCR_domains.hmm # 运行hmmscan echo "扫描GPCR结构域 (使用 ${CPU} 核心)..." hmmscan --cpu ${CPU} \ --tblout ${OUTPUT_DIR}/hmmer_results/pfam.tblout \ --domtblout ${OUTPUT_DIR}/hmmer_results/pfam.domtblout \ ${DB_DIR}/GPCR_domains.hmm \ ${INPUT_FASTA} # 检查hmmscan是否成功 if [ ! -s "${OUTPUT_DIR}/hmmer_results/pfam.tblout" ]; then echo "警告: hmmscan 未生成有效输出,尝试使用完整Pfam数据库" hmmscan --cpu ${CPU} \ --tblout ${OUTPUT_DIR}/hmmer_results/pfam.tblout \ --domtblout ${OUTPUT_DIR}/hmmer_results/pfam.domtblout \ ${DB_DIR}/Pfam-A.hmm \ ${INPUT_FASTA} fi fi # ===== 2. InterPro 远程注释 ===== if [ $START_STEP -le 2 ]; then echo "=== 步骤2: 使用本地InterProScan进行注释 ===" # 确保在正确的conda环境 source /home/cm/miniconda3/etc/profile.d/conda.sh conda activate gpcr_analysis # 1. 设置本地InterProScan路径 IPRSCAN_DIR="/media/edsb3/disk1/cm/GPCR_project/He/interproscan-5.75-106.0" IPRSCAN_SCRIPT="${IPRSCAN_DIR}/interproscan.sh" # 2. 验证安装 if [ ! -f "${IPRSCAN_SCRIPT}" ]; then echo "错误: 找不到interproscan.sh脚本! 请检查路径: ${IPRSCAN_SCRIPT}" exit 1 fi echo "使用本地InterProScan: ${IPRSCAN_SCRIPT}" # 3. 确保Java环境 echo "配置Java环境..." if ! command -v java &> /dev/null; then echo "安装Java..." conda install -c conda-forge -y openjdk=17 fi echo "Java版本: $(java -version 2>&1 | head -1)" # 4. 初始化InterProScan(如果未初始化) if [ ! -f "${IPRSCAN_DIR}/interproscan.properties" ]; then echo "初始化InterProScan..." cd ${IPRSCAN_DIR} python3 setup.py interproscan.properties cd ${WORK_DIR} fi # 5. 准备输出目录 mkdir -p ${OUTPUT_DIR}/hmmer_results # 6. 创建清洁的FASTA文件(移除星号) echo "创建清洁的FASTA文件(移除星号)..." CLEAN_FASTA="${OUTPUT_DIR}/hmmer_results/clean_proteins.fasta" # 使用AWK移除序列中的星号 awk '{ if (/^>/) { # 标题行直接打印 print } else { # 序列行移除星号 gsub(/\*/, "", $0) print } }' ${INPUT_FASTA} > ${CLEAN_FASTA} # 验证清洁文件 if [ ! -s "${CLEAN_FASTA}" ]; then echo "错误: 清洁FASTA文件创建失败!" exit 1 fi # 7. 运行Interpro注释 echo "运行Interpro注释..." INTERPRO_OUTPUT="${OUTPUT_DIR}/hmmer_results/interpro_results.xml" LOG_FILE="${OUTPUT_DIR}/hmmer_results/interpro_scan.log" # 设置Java内存参数 export JAVA_OPTS="-Xmx8G" # 运行命令 ${IPRSCAN_SCRIPT} \ -i ${CLEAN_FASTA} \ -f XML \ -o ${INTERPRO_OUTPUT} \ -appl SUPERFAMILY \ -goterms \ -pa \ -iprlookup \ -verbose 2>&1 | tee ${LOG_FILE} # 8. 提取包含SSF81321结构域的蛋白质名称 echo "提取GPCR相关结构域 (SSF81321)..." python3 <<EOF import xml.etree.ElementTree as ET import re # 定义命名空间 ns = {'ipr': 'https://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/schemas'} try: # 解析XML文件 tree = ET.parse('${INTERPRO_OUTPUT}') root = tree.getroot() # 存储结果 gpcr_proteins = set() # 遍历所有蛋白质元素 for protein in root.findall('ipr:protein', ns): # 获取蛋白质名称(来自<xref>标签的name属性) xref = protein.find('ipr:xref', ns) if xref is None: continue protein_name = xref.get('name') if protein_name is None: continue # 检查匹配项 matches = protein.find('ipr:matches', ns) if matches is None: continue # 遍历所有匹配 for match in matches.findall('ipr:superfamilyhmmer3-match', ns): signature = match.find('ipr:signature', ns) if signature is None: continue # 检查是否为SSF81321 if signature.get('ac') == 'SSF81321': # 提取蛋白质名称的第一部分 name_parts = protein_name.split() if name_parts: gpcr_proteins.add(name_parts[0]) else: gpcr_proteins.add(protein_name) break # 找到一个匹配就足够 # 保存结果 with open('${OUTPUT_DIR}/hmmer_results/superfamily_gpcrs.txt', 'w') as f: for protein in sorted(gpcr_proteins): f.write(protein + '\n') print(f'找到 {len(gpcr_proteins)} 个包含SSF81321结构域的蛋白质') except Exception as e: print(f"XML解析错误: {str(e)}") print("使用备用方法...") # 备用方法:正则表达式解析 content = open('${INTERPRO_OUTPUT}', 'r').read() # 查找所有蛋白质块 protein_blocks = re.findall(r'<protein\b[^>]*>(.*?)</protein>', content, re.DOTALL) results = set() for block in protein_blocks: # 检查是否有SSF81321 if 'ac="SSF81321"' not in block: continue # 提取蛋白质名称 name_match = re.search(r'<xref\s[^>]*name="([^"]+)"', block) if name_match: name = name_match.group(1).split()[0] # 取第一部分 results.add(name) # 保存结果 with open('${OUTPUT_DIR}/hmmer_results/superfamily_gpcrs.txt', 'w') as f: for protein in sorted(results): f.write(protein + '\n') print(f'使用备用方法找到 {len(results)} 个包含SSF81321结构域的蛋白质') EOF # 9. 验证结果 if [ -s "${OUTPUT_DIR}/hmmer_results/superfamily_gpcrs.txt" ]; then COUNT=$(wc -l < "${OUTPUT_DIR}/hmmer_results/superfamily_gpcrs.txt") echo "Interpro注释完成! 找到 ${COUNT} 个GPCR相关蛋白" echo "前5个候选蛋白:" head -n 5 "${OUTPUT_DIR}/hmmer_results/superfamily_gpcrs.txt" else echo "警告: 未找到包含SSF81321结构域的蛋白质" # 直接使用grep提取 grep -B 5 'signature_ac="SSF81321"' "${INTERPRO_OUTPUT}" | grep 'protein name=' | awk -F'"' '{print $2}' | sort -u > "${OUTPUT_DIR}/hmmer_results/superfamily_gpcrs.txt" if [ -s "${OUTPUT_DIR}/hmmer_results/superfamily_gpcrs.txt" ]; then COUNT=$(wc -l < "${OUTPUT_DIR}/hmmer_results/superfamily_gpcrs.txt") echo "使用grep找到 ${COUNT} 个候选" else touch "${OUTPUT_DIR}/hmmer_results/superfamily_gpcrs.txt" fi fi fi # ===== 3. 合并候选分子 ===== if [ $START_STEP -le 3 ]; then echo "=== 步骤3: 合并候选GPCR分子 ====" if [ -f "${OUTPUT_DIR}/hmmer_results/pfam.tblout" ]; then awk '! /^#/ {print $1}' ${OUTPUT_DIR}/hmmer_results/pfam.tblout | sort -u \ > ${OUTPUT_DIR}/hmmer_results/pfam_candidates.txt else echo "警告: Pfam结果文件缺失" touch ${OUTPUT_DIR}/hmmer_results/pfam_candidates.txt fi cat ${OUTPUT_DIR}/hmmer_results/pfam_candidates.txt \ ${OUTPUT_DIR}/hmmer_results/superfamily_gpcrs.txt \ | sort -u > ${OUTPUT_DIR}/hmmer_results/all_candidates.txt # 提取候选序列 if [ -s "${OUTPUT_DIR}/hmmer_results/all_candidates.txt" ]; then seqkit grep -f ${OUTPUT_DIR}/hmmer_results/all_candidates.txt \ ${INPUT_FASTA} > ${OUTPUT_DIR}/final_results/candidate_sequences.fasta else echo "警告: 无候选序列" touch ${OUTPUT_DIR}/final_results/candidate_sequences.fasta fi fi # ===== 4. DeepTMHMM 预测 (独立 Python 实现) ===== if [ $START_STEP -le 4 ]; then echo "=== 步骤4: 直接运行 DeepTMHMM Python 实现 ===" INPUT_FILE="${OUTPUT_DIR}/final_results/candidate_sequences.fasta" OUTPUT_DIR_TMHMM="${OUTPUT_DIR}/tmhmm_results" # 检查是否有候选序列 if [ ! -s "$INPUT_FILE" ]; then echo "警告: 没有候选序列,跳过 DeepTMHMM 分析" exit 0 fi # 创建输出目录 mkdir -p "${OUTPUT_DIR_TMHMM}" # 激活分析环境 source /home/cm/miniconda3/etc/profile.d/conda.sh conda activate gpcr_analysis # 1. 下载 DeepTMHMM 代码 echo "下载 DeepTMHMM 代码..." DEEPTMHMM_DIR="${WORK_DIR}/DeepTMHMM" DEEPTMHMM_ZIP="${WORK_DIR}/DeepTMHMM.zip" if [ ! -d "${DEEPTMHMM_DIR}" ]; then wget -O "${DEEPTMHMM_ZIP}" https://github.com/ElofssonLab/DeepTMHMM/archive/refs/heads/main.zip unzip -q -d "${WORK_DIR}" "${DEEPTMHMM_ZIP}" mv "${WORK_DIR}/DeepTMHMM-main" "${DEEPTMHMM_DIR}" rm "${DEEPTMHMM_ZIP}" else echo "使用已有的 DeepTMHMM 目录" fi # 2. 安装依赖 echo "安装依赖..." pip install -q tensorflow==2.15.0 protobuf==3.20.3 # 3. 运行预测 echo "运行 DeepTMHMM 预测..." cd "${DEEPTMHMM_DIR}" # 创建运行脚本 cat > run_deeptmhmm.py <<EOF import os import sys import argparse from predict import predict def main(): parser = argparse.ArgumentParser(description='Run DeepTMHMM') parser.add_argument('--fasta', required=True, help='Input FASTA file') parser.add_argument('--out', required=True, help='Output directory') args = parser.parse_args() # 创建命名空间对象 class Args: pass args_obj = Args() args_obj.fasta = args.fasta args_obj.out = args.out args_obj.batch_size = 1 args_obj.cpu = True args_obj.gpu = False # 确保输出目录存在 os.makedirs(args_obj.out, exist_ok=True) # 运行预测 predict(args_obj) if __name__ == "__main__": main() EOF # 运行脚本 python run_deeptmhmm.py \ --fasta "${INPUT_FILE}" \ --out "${OUTPUT_DIR_TMHMM}" # 4. 处理结果 cd "${WORK_DIR}" if [ -f "${OUTPUT_DIR_TMHMM}/predicted_topologies.gff3" ]; then # 重命名结果文件 mv "${OUTPUT_DIR_TMHMM}/predicted_topologies.gff3" "${OUTPUT_DIR_TMHMM}/combined.gff3" # 统计跨膜螺旋 COUNT=$(grep -c "TMhelix" "${OUTPUT_DIR_TMHMM}/combined.gff3" || echo 0) echo "DeepTMHMM 预测完成! 检测到 ${COUNT} 个跨膜螺旋" echo "结果文件: ${OUTPUT_DIR_TMHMM}/combined.gff3" else echo "错误: 未生成预测结果文件" echo "请尝试手动运行:" echo "cd ${DEEPTMHMM_DIR}" echo "python predict.py --fasta ${INPUT_FILE} --out ${OUTPUT_DIR_TMHMM} --cpu" exit 1 fi fi # ===== 5. 合并结果并筛选 ===== if [ $START_STEP -le 5 ]; then echo "=== 步骤5: 合并结果并筛选 ====" # 合并所有GFF3文件 if ls ${OUTPUT_DIR}/tmhmm_results/*_result.gff3 1> /dev/null 2>&1; then cat ${OUTPUT_DIR}/tmhmm_results/*_result.gff3 > ${OUTPUT_DIR}/tmhmm_results/combined.gff3 else echo "警告: 未找到任何GFF3结果文件" touch ${OUTPUT_DIR}/tmhmm_results/combined.gff3 fi # 提取有效跨膜蛋白 if [ -s "${OUTPUT_DIR}/tmhmm_results/combined.gff3" ]; then awk '$7=="TMhelix" {print $1}' ${OUTPUT_DIR}/tmhmm_results/combined.gff3 \ | sort | uniq -c | awk '$1>=3 && $1<=8 {print $2}' \ > ${OUTPUT_DIR}/tmhmm_results/valid_tm_proteins.txt # 提取有效候选序列 if [ -s "${OUTPUT_DIR}/tmhmm_results/valid_tm_proteins.txt" ]; then seqkit grep -f ${OUTPUT_DIR}/tmhmm_results/valid_tm_proteins.txt \ ${OUTPUT_DIR}/final_results/candidate_sequences.fasta \ > ${OUTPUT_DIR}/final_results/valid_tm_candidates.fasta else echo "警告: 未找到有效跨膜蛋白" touch ${OUTPUT_DIR}/final_results/valid_tm_candidates.fasta fi else echo "警告: combined.gff3文件为空,跳过跨膜筛选" touch ${OUTPUT_DIR}/tmhmm_results/valid_tm_proteins.txt touch ${OUTPUT_DIR}/final_results/valid_tm_candidates.fasta fi fi # ===== 6. 生成最终报告 ===== if [ $START_STEP -le 6 ]; then echo "=== 步骤6: 生成最终报告 ====" # 生成报告 { echo "GPCR 分析最终报告" echo "======================" echo "分析时间: $(date)" echo "工作目录: ${WORK_DIR}" echo "输入文件: ${INPUT_FASTA}" echo "总蛋白数: $(grep -c '>' ${INPUT_FASTA} || echo 0)" # Pfam结果 echo -e "\n[Pfam 结果]" if [ -f "${OUTPUT_DIR}/hmmer_results/pfam_candidates.txt" ] && [ -s "${OUTPUT_DIR}/hmmer_results/pfam_candidates.txt" ]; then echo "候选数: $(wc -l < ${OUTPUT_DIR}/hmmer_results/pfam_candidates.txt)" echo "前5个候选蛋白:" head -n 5 ${OUTPUT_DIR}/hmmer_results/pfam_candidates.txt else echo "无Pfam候选或结果文件缺失" fi # Superfamily结果 echo -e "\n[Superfamily 结果]" if [ -f "${OUTPUT_DIR}/hmmer_results/superfamily_gpcrs.txt" ] && [ -s "${OUTPUT_DIR}/hmmer_results/superfamily_gpcrs.txt" ]; then echo "候选数: $(wc -l < ${OUTPUT_DIR}/hmmer_results/superfamily_gpcrs.txt)" echo "前5个候选蛋白:" head -n 5 ${OUTPUT_DIR}/hmmer_results/superfamily_gpcrs.txt else echo "无Superfamily候选或结果文件缺失" fi # 合并结果 echo -e "\n[合并候选]" if [ -f "${OUTPUT_DIR}/hmmer_results/all_candidates.txt" ] && [ -s "${OUTPUT_DIR}/hmmer_results/all_candidates.txt" ]; then echo "总数: $(wc -l < ${OUTPUT_DIR}/hmmer_results/all_candidates.txt)" else echo "无合并候选" fi # 跨膜结果 echo -e "\n[跨膜蛋白筛选]" if [ -f "${OUTPUT_DIR}/tmhmm_results/valid_tm_proteins.txt" ] && [ -s "${OUTPUT_DIR}/tmhmm_results/valid_tm_proteins.txt" ]; then echo "有效跨膜蛋白(3-8TM): $(wc -l < ${OUTPUT_DIR}/tmhmm_results/valid_tm_proteins.txt)" echo "前5个有效蛋白:" head -n 5 ${OUTPUT_DIR}/tmhmm_results/valid_tm_proteins.txt else echo "无有效跨膜蛋白" fi # 结果文件列表 echo -e "\n[结果文件]" find ${OUTPUT_DIR} -type f | sed "s|${WORK_DIR}/||" } > ${OUTPUT_DIR}/final_results/summary_report.txt echo "分析完成!结果保存在: ${OUTPUT_DIR}" echo "最终报告: ${OUTPUT_DIR}/final_results/summary_report.txt" fi fi 这是我主要工作的代码,其中的deeptmhmm分析要怎么改进

filetype

#!/usr/bin/env python from __future__ import print_function import tensorflow as tf from tensorflow import keras import numpy as np import pandas as pd import matplotlib.pyplot as plt from tensorflow.keras.optimizers import RMSprop print(tf.__version__) boston_housing = keras.datasets.boston_housing (train_data, train_labels), (test_data, test_labels) = boston_housing.load_data() # Shuffle the training set order = np.argsort(np.random.random(train_labels.shape)) train_data = train_data[order] train_labels = train_labels[order] print("Training set: {}".format(train_data.shape)) # 404 examples, 13 features print("Testing set: {}".format(test_data.shape)) # 102 examples, 13 features print(train_data[0]) column_names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT'] df = pd.DataFrame(train_data, columns=column_names) print(df.head()) print(train_labels[0:10]) # Display first 10 entries. # Normalize features # Test data is *not* used when calculating the mean and std. mean = train_data.mean(axis=0) std = train_data.std(axis=0) train_data = (train_data - mean) / std test_data = (test_data - mean) / std print(train_data[0]) # First training sample, normalized. # Create the model def build_model(): model = keras.Sequential([ keras.layers.Dense(64, activation=tf.nn.relu, input_shape=(train_data.shape[1], )), keras.layers.Dense(64, activation=tf.nn.relu), keras.layers.Dense(1) ]) optimizer = RMSprop(learning_rate=0.001) model.compile(optimizer=optimizer, loss='mse', metrics=['accuracy']) return model model = build_model() model.summary() # Train the model # Display training progress by printing a single dot for each completed epoch. class PrintDot(keras.callbacks.Callback): def on_epoch_end(self, epoch, logs): if epoch % 100 == 0: print('') print('.', end='') # The patience parameter is the amount of epochs to check for improvement. early_stop = keras.callbacks.EarlyStopping(monitor='val_loss', patience=20) EPOCHS = 500 # Store training stats history = model.fit(train_data, train_labels, epochs=EPOCHS, validation_split=0.2, verbose=0, callbacks=[early_stop, PrintDot()]) # Evaluate the model [loss, mae] = model.evaluate(test_data, test_labels, verbose=0) print("Testing set Mean Abs Error: ${:7.2f}".format(mae * 1000)) # Predict test_predictions = model.predict(test_data).flatten() print(test_predictions) def plot_history(history): train_mae = history.history['mae'] val_mae = history.history['val_mae'] epochs = range(1, len(train_mae) + 1) plt.figure(figsize=(10, 6)) plt.plot(epochs, train_mae, 'bo-', label='Training MAE') plt.plot(epochs, val_mae, 'ro-', label='Validation MAE') plt.title('Training and Validation Mean Absolute Error', fontsize=16) plt.xlabel('Epochs', fontsize=14) plt.ylabel('Mean Absolute Error', fontsize=14) plt.legend(fontsize=12) plt.grid(True) plt.show() plot_history(history) 基于下列报告修改上述代码,并一次性给我完整的代码 Traceback (most recent call last): File "D:\python-learing\demo\DL 3.7.py", line 108, in <module> plot_history(history) File "D:\python-learing\demo\DL 3.7.py", line 92, in plot_history train_mae = history.history['mae'] KeyError: 'mae' [ 8.789242 18.468094 21.155748 31.63077 24.694078 19.746622 25.562876 21.117872 19.488682 23.50709 15.733764 17.597237 16.166594 39.379726 20.539413 19.302547 24.810902 19.15611 20.536394 27.440975 13.175588 17.494179 20.968292 15.965258 19.50977 26.75446 29.434267 28.926039 11.430149 19.82054 18.90789 16.22429 31.83424 23.501408 18.918694 10.294504 16.567099 20.067335 20.325274 25.249048 29.594149 26.039463 15.246936 39.660152 29.26624 24.54819 26.662207 15.776819 24.136528 21.586538 34.051945 17.228916 13.333934 16.0006 34.15097 26.780346 13.686885 46.875324 32.47801 22.25499 24.672956 18.13254 16.165648 18.413452 22.202253 20.047533 13.763263 21.195665 13.380873 7.9529247 27.959822 28.760138 28.298738 13.7667675 24.891384 16.369394 19.161646 23.020407 34.13951 12.289016 20.343996 37.767864 16.200666 14.610179 16.891275 16.048622 22.495382 20.166208 20.836988 32.132076 18.261036 18.878714 24.230917 40.217243 34.984745 20.786575 35.40306 47.34185 25.055857 46.952953 30.8333 23.025936 ]

filetype

1.导入excle、csv、txt格式数据,数据中包含很多不同高程的风速与风向定义变量用于后续程序处理(写在1.ImportData.py文件) 2.清理异常值(根据国标,风速0~40m/s,风向0~360度(风向负值要替换到对应正值?),空值要写0并标记,长时间接近0,长时间数据不变都要处理删除取0,画出处理后的数据图)(写在2.CleanData.py文件) 3.同塔插补(用同一机组不同时间数据插补完整)(写在3.InterpolationData-Same.py文件) 4.异塔插补(用不同塔同一时间数据插补完整)(写在4.InterpolationData-Diff.py文件) 5.插补全塔(同塔插补和异塔插补补全数据,注意每个高度程都要插补,查看数据完整率要大于95%,否则继续插补) 6.输出完整年(剔除数据多余天数,只保留一整年)(写在5.FullyearData.py文件) 7.外推轮毂高度处数据(用数据较好且高程接近的数据,利用风切变指数外推到想要的高程数据)(写在6.ExtrapolateData.py文件) 6个.py文件写算法,最后用main.py文件调用运行 整个步骤每一步都导出excle文件 插补方法:Windographer中8中MCP算法:(测量-关联-预测 (MCP)方法)①线性最小二乘法(LLS)、②正交最小二乘法(TLS)、③方差比法(VR)、④风速分类法(SS) 、⑤平方差比方法(VR)、⑥矩阵时间序列法(MTS)、⑦威布尔分布法(WBL)、垂直分层法(VS)(循环比较误差?利用已有的数据真实值作为训练集,先假设去除真实值利用算法得到插补值,与真实值比较误差,选择误差最小的算法作为该测风塔的插补法进行缺测数据插补) 使用机器学习方法(长短期记忆神经网络LSTM插补法、多头注意力机制插补法(计算样本与样本之间相关性来赋予每个样本在序列中的重要性的权重)、随机森林插补法) 注意:插补的塔使用主风向相似且最相邻的塔为最佳(要进行风向分析) 出图:风速与风向原始时序图、玫瑰图;清理异常值后时序图、玫瑰图;训练时不同插补方法对比图与误差对比图得到该风机最佳插补法;插补后完整风速与风向时序图玫瑰图,计算结果满足国标:输出数据为一个完整年、数据完整率>90%、平均风速范围在0~40m/s、评价风向范围在0~360° 评价指标:MSE值、威布尔分布K值、平均风速、风功率密度、风电机组发电量

白天。
  • 粉丝: 1
上传资源 快速赚钱