From 5ee4d56dc5dda22bea96fb22871a99ebad84b4d9 Mon Sep 17 00:00:00 2001 From: hypox64 Date: Sat, 13 Jun 2020 16:14:36 +0800 Subject: [PATCH] Fix autoencoder --- README.md | 5 +++-- README_CN.md | 4 ++-- imgs/running_err_eg.png | Bin 21063 -> 0 bytes imgs/running_loss_eg.png | Bin 0 -> 24621 bytes models/core.py | 40 ++++++++++++++++++++------------------- tools/client.py | 2 +- tools/server.py | 1 + util/dsp.py | 9 --------- util/plot.py | 27 ++++++++++++++++++++------ 9 files changed, 49 insertions(+), 39 deletions(-) delete mode 100644 imgs/running_err_eg.png create mode 100644 imgs/running_loss_eg.png diff --git a/README.md b/README.md index 02af0db..22eaf73 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,11 @@ # candock -| English | [中文版](./README_CN.md) |
+| English | [中文版](./README_CN.md) |

A time series signal analysis and classification framework.
It contain multiple network and provide data preprocessing, reading, training, evaluation, testing and other functions.
-Some output examples: [heatmap](./image/heatmap_eg.png) [running_err](./image/running_err_eg.png) [log.txt](./docs/log_eg.txt)
Supported network:
+Some output examples: [heatmap](./image/heatmap_eg.png) [running_loss](./image/running_loss_eg.png) [log.txt](./docs/log_eg.txt)
+Supported network:
>1d > diff --git a/README_CN.md b/README_CN.md index 7c88ec3..7043e00 100644 --- a/README_CN.md +++ b/README_CN.md @@ -4,10 +4,10 @@ # candock -| [English](./README.md) | 中文版 |
+| [English](./README.md) | 中文版 |

一个通用的一维时序信号分析,分类框架.
它将包含多种网络结构,并提供数据预处理,读取,训练,评估,测试等功能.
-一些训练时的输出样例: [heatmap](./image/heatmap_eg.png) [running_err](./image/running_err_eg.png) [log.txt](./docs/log_eg.txt)
+一些训练时的输出样例: [heatmap](./image/heatmap_eg.png) [running_loss](./image/running_loss_eg.png) [log.txt](./docs/log_eg.txt)
目前支持的网络结构:
>1d > diff --git a/imgs/running_err_eg.png b/imgs/running_err_eg.png deleted file mode 100644 index 6b12d6d55ad5d788cb6e99a4647c543f26823360..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21063 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 E0Li=;Z2$lO diff --git a/imgs/running_loss_eg.png b/imgs/running_loss_eg.png new file mode 100644 index 0000000000000000000000000000000000000000..5132b4c3640bb71b78d667bd8c2b979bbf28defb GIT binary patch literal 24621 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','1','2','3','4','s','p','*','h','H','+',' #---------------------------------heatmap--------------------------------- -''' +""" heatmap: https://matplotlib.org/gallery/images_contours_and_fields/image_annotated_heatmap.html#sphx-glr-gallery-images-contours-and-fields-image-annotated-heatmap-py choose color:https://matplotlib.org/tutorials/colors/colormaps.html?highlight=wistia recommend: YlGn Wistia Blues YlOrBr -''' +""" def create_heatmap(data, row_labels, col_labels, ax=None, cbar_kw={}, cbarlabel="", **kwargs): """ @@ -193,6 +193,8 @@ def label_statistics(labels): return label_cnt,label_cnt_per,label_num def draw_scatter(data,opt): + data = np.array(data) + data = data[np.argsort(data[:,-1])] label_cnt,_,label_num = label_statistics(data[:,-1]) fig = plt.figure(figsize=(12,9)) cnt = 0 @@ -205,23 +207,36 @@ def draw_scatter(data,opt): data_dimension = 3 if data_dimension == 2: + plt.xlim(-1.5,1.5) + plt.ylim(-1.5,1.5) for i in range(label_num): - plt.scatter(data[cnt:cnt+label_cnt[i],0], data[cnt:cnt+label_cnt[i],1], + plt.scatter( + (data[cnt:cnt+label_cnt[i],0])[:100], + (data[cnt:cnt+label_cnt[i],1])[:100], + label=str(i), ) cnt += label_cnt[i] - elif data_dimension == 3: ax = fig.add_subplot(111, projection='3d') + ax.set_zlim3d(-1.5, 1.5) + ax.set_ylim3d(-1.5, 1.5) + ax.set_xlim3d(-1.5, 1.5) for i in range(label_num): - ax.scatter(data[cnt:cnt+label_cnt[i],0], data[cnt:cnt+label_cnt[i],1], data[cnt:cnt+label_cnt[i],2], + ax.scatter( + (data[cnt:cnt+label_cnt[i],0])[:100], + (data[cnt:cnt+label_cnt[i],1])[:100], + (data[cnt:cnt+label_cnt[i],2])[:100], + label=str(i), ) cnt += label_cnt[i] - + plt.title('Autoencoder Embedding Result') + plt.legend(loc=2) plt.savefig(os.path.join(opt.save_dir,'feature_scatter.png')) np.save(os.path.join(opt.save_dir,'feature_scatter.npy'), data) plt.close('all') + def draw_autoencoder_result(true_signal,pred_signal,opt): plt.subplot(211) plt.plot(true_signal[0][0]) -- GitLab