首先我必须说我是matlab的新手(以及这个网站......),所以请原谅我的无知.
我正在尝试在matlab中编写一个函数,它将使用Spectral Clustering将一组点分成两个簇.
我的代码如下
function Groups = TrySpectralClustering(data)
dist_mat = squareform(pdist(data));
W= zeros(length(data),length(data));
for i=1:length(data),
for j=(i+1):length(data),
W(i,j)=10^(-dist_mat(i,j));
W(j,i)=W(i,j);
end
end
D = zeros(length(data),length(data));
for i=1:length(W),
D(i,i)=sum(W(i,:));
end
L=D-W;
L=D^(-0.5)*L*D^(-0.5);
[ V E ] = eig(L);
disp ('V:');
disp (V);
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,那么通过使用第二个最小的特征向量,我应该能够将数据划分为两个聚类 - 如果第二个特征向量的第i个成员是正数,则第i个数据点将在一个聚类中,否则它将在另一个集群中.
但是,当我尝试以下
f=[1,1;0,0;1,0;0,1;100,100;100,101;101,101;101,100]
TrySpectralClustering(f)
Run Code Online (Sandbox Code Playgroud)
我希望前四个点组成一个簇,后四个组成另一个簇.
但是,我收到了
V:
-0.0000 -0.5000 0.0000 -0.5777 0.0000 0.4078 -0.0000 0.5000
-0.0000 -0.5000 0.0000 0.5777 0.0000 -0.4078 -0.0000 0.5000
-0.0000 -0.5000 0.0000 0.4078 0.0000 0.5777 -0.0000 -0.5000
-0.0000 -0.5000 0.0000 -0.4078 0.0000 -0.5777 -0.0000 …Run Code Online (Sandbox Code Playgroud) 在 Huggingface 实现中使用基本 BERT 模型的普通配置,我得到了一个长度为 2 的元组。
import torch
import transformers
from transformers import AutoModel,AutoTokenizer
bert_name="bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(bert_name)
BERT = AutoModel.from_pretrained(bert_name)
e=tokenizer.encode('I am hoping for the best', add_special_tokens=True)
q=BERT(torch.tensor([e]))
print (len(q)) #Output: 2
Run Code Online (Sandbox Code Playgroud)
第一个元素是我期望收到的 - 每个输入标记的 768 维嵌入。
print (e) #Output : [101, 1045, 2572, 5327, 2005, 1996, 2190, 102]
print (q[0].shape) #Output : torch.Size([1, 8, 768])
Run Code Online (Sandbox Code Playgroud)
但是元组中的第二个元素是什么?
print (q[1].shape) # torch.Size([1, 768])
Run Code Online (Sandbox Code Playgroud)
它的大小与每个令牌的编码相同。但它是什么?
也许是 [CLS] 标记的副本,是整个编码文本的分类的表示?
让我们检查。
a= q[0][:,0,:]
b=q[1]
print (torch.eq(a,b)) #Output : Tensor([[False, False, False, .... …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用“layer_from_config”Keras 实用程序从以前保存的配置加载层,如下所述: https ://keras.io/layers/about-keras-layers/
首先,我尝试在基本模型上使用它
import keras
keras.backend.set_image_dim_ordering("th")
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Convolution2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
# dimensions of our images.
img_width, img_height = 150, 150
train_data_dir = '//shared_directory/projects/try_CD/data/train/'
validation_data_dir = '//shared_directory/projects/try_CD/data/validation'
nb_train_samples = 2000
nb_validation_samples = 800
nb_epoch = 50 # 50
model = Sequential()
model.add(Convolution2D(32, 3, 3, input_shape=(3, img_width, img_height)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Convolution2D(32, 3, 3))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Convolution2D(64, 3, 3))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten()) …Run Code Online (Sandbox Code Playgroud) 作为“健全性检查”,我尝试了两种使用转移学习的方法,我希望它们的行为相同,如果不是在运行时间而不是在结果中。
第一种方法是使用瓶颈特征(如此处所述https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html),即使用现有预测器在最后一个密集层之前生成特征,保存它们,然后使用这些特征作为输入训练新的密集层。
第二种方法是用新的模型替换模型的最后一个密集层,然后冻结模型中的所有其他层。
我希望第二种方法和第一种方法一样有效,但事实并非如此。
第一种方法的输出是
Epoch 1/50
16/16 [==============================] - 0s - loss: 1.3095 - acc: 0.4375 - val_loss: 0.4533 - val_acc: 0.7500
Epoch 2/50
16/16 [==============================] - 0s - loss: 0.3555 - acc: 0.8125 - val_loss: 0.2305 - val_acc: 1.0000
Epoch 3/50
16/16 [==============================] - 0s - loss: 0.1365 - acc: 1.0000 - val_loss: 0.1603 - val_acc: 1.0000
Epoch 4/50
16/16 [==============================] - 0s - loss: 0.0600 - acc: 1.0000 - val_loss: 0.1012 - val_acc: 1.0000
Epoch …Run Code Online (Sandbox Code Playgroud) 我有一个需要很长时间才能运行的python脚本。
我在整个脚本中放置了打印输出以观察其进度。由于此脚本使用不同的程序,其中一些程序会打印许多消息,因此直接打印到屏幕上是不可行的。
因此,我正在使用报告文件
f_report = open(os.path.join("//shared_directory/projects/work_area/", 'report.txt'), 'w')
Run Code Online (Sandbox Code Playgroud)
我在上面打印我的按摩:
f_report.write(" "+current_image+"\n")
Run Code Online (Sandbox Code Playgroud)
但是,在脚本运行时查看文件时,看不到消息。它们仅在程序完成并关闭文件后出现,这使我的方法无法监视正在进行的进度。为了使python实时将消息输出到报告文件,我应该怎么做?
非常感谢。