import idx2numpy import numpy as np from functions import * from two_layer_network import * #导入训练集和训练集对应的标签并将其初始化 X_train,T_train=idx2numpy.convert_from_file('emnist/emnist-letters-train-images-idx3-ubyte'),idx2numpy.convert_from_file('emnist/emnist-letters-train-labels-idx1-ubyte') X_train,T_train=X_train.copy(),T_train.copy() X_train=X_train.reshape((X_train.shape[0],-1)) T_train=T_train-1 T_train=np.eye(26)[T_train] #导入测试集和测试集对应的标签标签并将其初始化 X_test,T_test=idx2numpy.convert_from_file('emnist/emnist-letters-test-images-idx3-ubyte'),idx2numpy.convert_from_file('emnist/emnist-letters-test-labels-idx1-ubyte') X_test,T_test=X_test.copy(),T_test.copy() X_test=X_test.reshape((X_test.shape[0],-1)) T_test=T_test-1 T_test=np.eye(26)[T_test] network=TwoLayerNet(input_size=784,hidden_size=45,output_size=26) train_size=X_train.shape[0] batch_size=100 iters_num=100000 learning_rate=0.01 train_loss_list=[] train_acc_list=[] test_acc_list=[] iter_per_epoch=max(train_size/batch_size,1) for i in range(iters_num): batch_mask=np.random.choice(train_size,batch_size) X_batch=X_train[batch_mask] T_batch=T_train[batch_mask] #从数据集里抽取batch_size笔数据 #grad=network.numerical_gradient(X_batch,T_batch)(跑不出来,卡在None None) grad=network.gradient(X_batch,T_batch) #计算梯度 for key in ('W1','b1','W2','b2') : network.params[key]-=learning_rate*grad[key] #误差反向传播法调整参数 loss=network.loss(X_batch,T_batch) train_loss_list.append(loss) #记录学习过程 if i % iter_per_epoch==0: train_acc=network.accuracy(X_train,T_train) test_acc=network.accuracy(X_test,T_test) train_acc_list.append(train_acc) test_acc_list.append(test_acc) print(train_acc,test_acc) #调整学习率 if i > 0 and i % 1000 == 0 and i<3000: learning_rate *= 0.1 print("learning rate reduced to " + str(learning_rate)) print(network.params) print(train_acc_list[-1],test_acc_list[-1])如果我想存储参数,该怎么做
时间: 2023-12-24 19:09:08 浏览: 34
如果想要存储参数,可以使用Python内置的pickle模块。具体步骤如下:
1. 在代码中加入以下代码,将训练后的参数保存到文件中:
```
import pickle
with open("params.pkl", "wb") as f:
pickle.dump(network.params, f)
```
其中,"params.pkl"是你想要存储参数的文件名,network.params是你的神经网络的参数。
2. 在需要使用训练后的参数进行预测时,可以通过以下代码从文件中读取参数:
```
import pickle
with open("params.pkl", "rb") as f:
params = pickle.load(f)
network.params = params
```
其中,params是从文件中读取到的参数,将其赋给network.params即可。
相关问题
import idx2numpy import numpy as np from functions import * #导入测试集和测试集对应的标签标签 X_test,y_test=idx2numpy.convert_from_file('emnist/emnist-letters-test-images-idx3-ubyte'),idx2numpy.convert_from_file('emnist/emnist-letters-test-labels-idx1-ubyte') def predict(network, x): #预测概率 W1,W2,W3=network['W1'],network['W2'],network['W3'] b1,b2,b3=network['b1'],network['b2'],network['b3'] a1=np.dot(x,W1)+b1 z1=sigmoid(a1) a2=np.dot(z1, W2)+b2 z2=sigmoid(a2) a3=np.dot(z2,W3)+b3 y=softmax(a3) return y def test(X_test,y_test,network): accracy_cnt=0 for i in range(len(X_test)): y=predict(network,X_test[i]) p=np.argmax(y) if p==y_test[i]: accracy_cnt+=1 return float(accracy_cnt(accracy_cnt)/len(X_test))
这段代码存在一些小问题。首先,在导入idx2numpy和numpy库时,应该使用import语句,而不是from语句。其次,在计算准确率时,代码中有一个语法错误,应该是float(accracy_cnt)/len(X_test)而不是float(accracy_cnt(accracy_cnt)/len(X_test))。
以下是修改后的代码:
```python
import idx2numpy
import numpy as np
from functions import *
# 导入测试集和测试集对应的标签标签
X_test, y_test = idx2numpy.convert_from_file('emnist/emnist-letters-test-images-idx3-ubyte'), idx2numpy.convert_from_file('emnist/emnist-letters-test-labels-idx1-ubyte')
def predict(network, x):
# 预测概率
W1, W2, W3 = network['W1'], network['W2'], network['W3']
b1, b2, b3 = network['b1'], network['b2'], network['b3']
a1 = np.dot(x, W1) + b1
z1 = sigmoid(a1)
a2 = np.dot(z1, W2) + b2
z2 = sigmoid(a2)
a3 = np.dot(z2, W3) + b3
y = softmax(a3)
return y
def test(X_test, y_test, network):
accuracy_cnt = 0
for i in range(len(X_test)):
y = predict(network, X_test[i])
p = np.argmax(y)
if p == y_test[i]:
accuracy_cnt += 1
return float(accuracy_cnt) / len(X_test)
```
希望这对你有所帮助!
from sklearn.feature_selection import SelectKBest from sklearn.feature_selection import chi2
这段代码使用了sklearn库中的SelectKBest和chi2函数,用于特征选择和卡方检验。
```python
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
# 假设已有特征矩阵X和目标变量y
# 创建特征选择对象
selector = SelectKBest(score_func=chi2, k=5) # 选择5个最佳特征
# 使用特征选择器对特征矩阵进行选择
X_new = selector.fit_transform(X, y)
# 获取选择后的特征索引
selected_features = selector.get_support(indices=True)
# 打印选择后的特征索引和得分
for feature_idx, score in zip(selected_features, selector.scores_):
print(f"Feature {feature_idx}: {score}")
```
这段代码的作用是使用卡方检验(chi-square test)和SelectKBest方法选择最佳的K个特征。
首先,你需要准备好特征矩阵X和目标变量y。然后,创建一个SelectKBest对象,将卡方检验(chi2)作为评分函数并指定要选择的最佳特征数量(k)。接下来,使用fit_transform方法对特征矩阵X进行特征选择,得到选择后的新特征矩阵X_new。
最后,通过get_support方法获取选择后的特征索引,并通过scores_属性获取每个特征的得分。你可以根据需要进一步处理这些选择后的特征索引和得分。
请确保已经导入了所需的库,并提供正确的特征矩阵X和目标变量y。如果还有其他问题,请随时提问。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![ipynb](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)