matlab中 dataset用法,dataset中shuffle()、repeat()、batch()用法

本文介绍了如何在 TensorFlow 中使用 `tf.data.Dataset` 进行数据预处理,包括从 numpy 数组创建数据集、使用 `shuffle` 打乱数据、`batch` 分批处理数据以及 `repeat` 重复数据集。示例代码展示了这些方法的实际应用。

import numpy as np

import tensorflow as tf

np.random.seed(0)

x = np.random.sample((11,2))

# make a dataset from a numpy array

print(x)

dataset = tf.data.Dataset.from_tensor_slices(x)

dataset = dataset.shuffle(2) # 将数据打乱,数值越大,混乱程度越大

dataset = dataset.batch(4) # 按照顺序取出4行数据,最后一次输出可能小于batch

dataset = dataset.repeat() # 数据集重复了指定次数

# repeat()在batch操作输出完毕后再执行,若在之前,相当于先把整个数据集复制两次

#为了配合输出次数,一般默认repeat()空

# create the iterator

iter = dataset.make_one_shot_iterator()

el = iter.get_next()

with tf.Session() as sess:

for i in range(6):

value = sess.run(el)

print(value)

更多的不同和进阶可以参考这个博客

Tensorflow datasets.shuffle repeat batch方法

机器学习中数据读取是很重要的一个环节,TensorFlow也提供了很多实用的方法,为了避免以后时间久了又忘记,所以写下笔记以备日后查看. 最普通的正常情况 首先我们看看最普通的情况: # 创建0-10 ...

【Spark篇】---Spark中Shuffle机制,SparkShuffle和SortShuffle

一.前述 Spark中Shuffle的机制可以分为HashShuffle,SortShuffle. SparkShuffle概念 reduceByKey会将上一个RDD中的每一个key对应的所有val ...

Java中的Socket的用法

Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

ecshop中foreach的详细用法归纳

ec模版中foreach的常见用法. foreach 语法: 假如后台:$smarty->assign('test',$test); {foreach from=$test item=list ...

matlab中patch函数的用法

http://blog.sina.com.cn/s/blog_707b64550100z1nz.html matlab中patch函数的用法——emily (2011-11-18 17:20:33) ...

C#中timer类的用法

C#中timer类的用法 关于C#中timer类  在C#里关于定时器类就有3个   1.定义在System.Windows.Forms里   2.定义在System.Threading.Timer类 ...

C# 导入Excel到DataSet中

class Import { /// /// 导入Excel到DataSet中 /// ///

C#中dynamic的正确用法

C#中dynamic的正确用法  http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125982.html dynamic是FrameWork4 ...

C++中typename关键字的用法

我在我的 薛途的博客 上发表了新的文章,欢迎各位批评指正. C++中typename关键字的用法

随机推荐

Corelocation及地图控件学习笔记

Corelocation基本使用 在地图章节的学习中,首先要学的便是用户位置定位,因此我们首先要掌握Corelocation的使用.(在IOS8以前可以系统会直接请求授权,现在需要我们自己调用方式通知 ...

openerp经典收藏 深入理解对象(转载)

import scipy.io import numpy as np import torch import torch.nn as nn from torch.utils.data import DataLoader, TensorDataset 1. 加载MAT文件(保持不变) def load_matlab_data(file_path): data = scipy.io.loadmat(file_path) csi = np.squeeze(data[‘csi’]) allocations = np.squeeze(data[‘allocations’]) symbols = np.squeeze(data[‘symbols_with_channel’]) snr = np.squeeze(data[‘snr’]) return csi, allocations, symbols, snr 2. 数据预处理(重构后) def preprocess_data(csi, allocations, snr): csi_abs = np.abs(csi) snr_expanded = np.expand_dims(snr, axis=1).repeat(csi_abs.shape[1], axis=1) X = np.concatenate([csi_abs, snr_expanded], axis=-1) y = allocations return X, y 3. 定义LSTM模型(修正后) class LSTMModel(nn.Module): def init(self, input_dim, hidden_dim, output_dim, num_layers=2): super().init() self.lstm = nn.LSTM(input_dim, hidden_dim, num_layers, batch_first=True) self.fc = nn.Linear(hidden_dim, output_dim) def forward(self, x): out, _ = self.lstm(x) return self.fc(out) 4. 训练与验证(修正后) def train_model(model, X_train, y_train, num_epochs=50, batch_size=32, lr=1e-3): dataset = TensorDataset( torch.tensor(X_train, dtype=torch.float32), torch.tensor(y_train, dtype=torch.long) ) dataloader = DataLoader(dataset, batch_size=batch_size, shuffle=True) criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(), lr=lr) for epoch in range(num_epochs): model.train() total_loss = 0 for batch_X, batch_y in dataloader: optimizer.zero_grad() outputs = model(batch_X) loss = criterion(outputs.permute(0, 2, 1), batch_y) loss.backward() optimizer.step() total_loss += loss.item() if (epoch + 1) % 10 == 0: print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {total_loss/len(dataloader):.4f}') def evaluate_model(model, X_test, y_test): model.eval() with torch.no_grad(): outputs = model(torch.tensor(X_test, dtype=torch.float32)) preds = outputs.argmax(dim=-1) accuracy = (preds == torch.tensor(y_test, dtype=torch.long)).float().mean() print(f’Test Accuracy: {accuracy.item():.4f}') 主函数(修正数据划分) def main(): csi, allocations, _, snr = load_matlab_data(‘ofdm_dataset_with_channel.mat’) X, y = preprocess_data(csi, allocations, snr) # 按时间顺序划分 split_idx = int(0.8 * len(X)) X_train, X_test = X[:split_idx], X[split_idx:] y_train, y_test = y[:split_idx], y[split_idx:] model = LSTMModel( input_dim=X_train.shape[-1], # 输入维度为 num_users + 1 hidden_dim=128, output_dim=np.max(allocations) + 1 # 类别数 ) train_model(model, X_train, y_train) evaluate_model(model, X_test, y_test) if name == ‘main’: main()修改bug
03-17
import scipy.io import numpy as np import torch import torch.nn as nn from torch.utils.data import DataLoader, TensorDataset from sklearn.model_selection import train_test_split # 1. 加载MAT文件 def load_matlab_data(file_path): data = scipy.io.loadmat(file_path) csi = np.squeeze(data['csi']) # [num_samples, num_subcarriers, num_users] allocations = np.squeeze(data['allocations']) # [num_samples, num_subcarriers] symbols = np.squeeze(data['symbols_with_channel']) snr = np.squeeze(data['snr']) return csi, allocations, symbols, snr # 2. 数据预处理 def preprocess_data(csi, allocations, snr): X = np.concatenate([ np.abs(csi).reshape(csi.shape[0], -1), snr.reshape(-1, 1) ], axis=1) y = allocations return X, y # 3. 定义LSTM模型 class LSTMModel(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim, num_layers=2): super().__init__() self.lstm = nn.LSTM(input_dim, hidden_dim, num_layers, batch_first=True) self.fc = nn.Linear(hidden_dim, output_dim) def forward(self, x): out, _ = self.lstm(x) # [batch_size, seq_length=1, hidden_dim] out = self.fc(out) # [batch_size, seq_length=1, output_dim] return out.squeeze(1) # [batch_size, output_dim] # 4. 训练与验证 def train_model(model, X_train, y_train, num_epochs=50, batch_size=32, lr=1e-3): dataset = TensorDataset( torch.tensor(X_train, dtype=torch.float32), torch.tensor(y_train, dtype=torch.long) ) dataloader = DataLoader(dataset, batch_size=batch_size, shuffle=True) criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(), lr=lr) for epoch in range(num_epochs): model.train() total_loss = 0 for batch_X, batch_y in dataloader: optimizer.zero_grad() outputs = model(batch_X.unsqueeze(1)) # [batch_size, output_dim] outputs_flat = outputs.view(-1, outputs.shape[-1]) targets_flat = batch_y.view(-1) loss = criterion(outputs_flat, targets_flat) loss.backward() optimizer.step() total_loss += loss.item() if (epoch + 1) % 10 == 0: print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {total_loss/len(dataloader):.4f}') def evaluate_model(model, X_test, y_test): model.eval() with torch.no_grad(): outputs = model(torch.tensor(X_test, dtype=torch.float32).unsqueeze(1)) outputs_flat = outputs.view(-1, outputs.shape[-1]) targets_flat = torch.tensor(y_test, dtype=torch.long).view(-1) accuracy = (outputs_flat.argmax(1) == targets_flat).float().mean() print(f'Test Accuracy: {accuracy.item():.4f}') # 主函数 def main(): csi, allocations, _, snr = load_matlab_data('ofdm_dataset_with_channel.mat') X, y = preprocess_data(csi, allocations, snr) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) model = LSTMModel( input_dim=X_train.shape[1], hidden_dim=128, output_dim=np.max(allocations) + 1 ) train_model(model, X_train, y_train) evaluate_model(model, X_test, y_test) if __name__ == '__main__': main()有Expected input batch_size (32) to match target batch_size (2048).修改一下
03-17
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值