tf.argmax(vector, 1)

本文详细解析了 TensorFlow 中的 tf.argmax 函数,该函数用于找出输入 tensor 中最大值的索引。通过具体示例,展示了当输入为向量或矩阵时,函数如何返回相应的最大值索引。

tf.argmax(vector, 1):返回的是vector中的最大值的索引号,如果vector是一个向量,那就返回一个值,如果是一个矩阵,那就返回一个向量,这个向量的每一个维度都是相对应矩阵行的最大值元素的索引号。

import tensorflow as tf
A = tf.constant([[1,2,3,4,5]])
B = tf.constant([[1,2,3],[6,5,4]])
with tf.Session() as sess:
    print(sess.run(tf.argmax(A,1)))
    print(sess.run(tf.argmax(B,1)))

输出
[4]
[2 0]

请查阅以下卷积神经网络代码,给出尝试运行并改良后的结果import tensorflow as tf import numpy as np from captcha.image import ImageCaptcha from PIL import Image import random import matplotlib.pyplot as plt number = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] ALPHABET = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] def random_captcha_text(char_set=number + alphabet + ALPHABET, captcha_size=4): captcha_text = [] for i in range(captcha_size): c = random.choice(char_set) captcha_text.append(c) return captcha_text def gen_captcha_text_and_image(i=0): # 创建图像实例对象 image = ImageCaptcha() # 随机选择4个字符 captcha_text = random_captcha_text() # array 转化为 string captcha_text = ''.join(captcha_text) # 生成验证码 captcha = image.generate(captcha_text) if i % 100 == 0: image.write(captcha_text, "D:/justin/captcha/image/" + captcha_text + '.jpg') captcha_image = Image.open(captcha) captcha_image = np.array(captcha_image) return captcha_text, captcha_image def convert2gray(img): if len(img.shape) > 2: gray = np.mean(img, -1) return gray else: return img # 文本转向量 def text2vec(text): text_len = len(text) if text_len > MAX_CAPTCHA: raise ValueError('验证码最长4个字符') vector = np.zeros(MAX_CAPTCHA * CHAR_SET_LEN) def char2pos(c): if c == '_': k = 62 return k k = ord(c) - 48 if k > 9: k = ord(c) - 55 if k > 35: k = ord(c) - 61 if k > 61: raise ValueError('No Map') return k for i, c in enumerate(text): idx = i * CHAR_SET_LEN + char2pos(c) vector[idx] = 1 return vector # 向量转回文本 def vec2text(vec): char_pos = vec[0] text = [] for i, c in enumerate(char_pos): char_idx = c % CHAR_SET_LEN if char_idx < 10: char_code = char_idx + ord('0') elif char_idx < 36: char_code = char_idx - 10 + ord('A') elif char_idx < 62: char_code = char_idx - 36 + ord('a') elif char_idx == 62: char_code = ord('_') else: raise ValueError('error') text.append(chr(char_code)) return "".join(text) # 生成一个训练batch def get_next_batch(batch_size=64): batch_x = np.zeros([batch_size, IMAGE_HEIGHT * IMAGE_WIDTH]) batch_y = np.zeros([batch_size, MAX_CAPTCHA * CHAR_SET_LEN]) def wrap_gen_captcha_text_and_image(i): while True: text, image = gen_captcha_text_and_image(i) if image.shape == (60, 160, 3): return text, image for i in range(batch_size): text, image = wrap_gen_captcha_text_and_image(i) image = convert2gray(image) batch_x[i, :] = image.flatten() / 255 batch_y[i, :] = text2vec(text) return batch_x, batch_y # 定义CNN def crack_captcha_cnn(w_alpha=0.01, b_alpha=0.1): x = tf.reshape(X, shape=[-1, IMAGE_HEIGHT, IMAGE_WIDTH, 1]) w_c1 = tf.Variable(w_alpha * tf.random_normal([3, 3, 1, 32])) b_c1 = tf.Variable(b_alpha * tf.random_normal([32])) conv1 = tf.nn.relu(tf.nn.bias_add(tf.nn.conv2d(x, w_c1, strides=[1, 1, 1, 1], padding='SAME'), b_c1)) conv1 = tf.nn.max_pool(conv1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') conv1 = tf.nn.dropout(conv1, rate=1 - keep_prob) w_c2 = tf.Variable(w_alpha * tf.random_normal([3, 3, 32, 64])) b_c2 = tf.Variable(b_alpha * tf.random_normal([64])) conv2 = tf.nn.relu(tf.nn.bias_add(tf.nn.conv2d(conv1, w_c2, strides=[1, 1, 1, 1], padding='SAME'), b_c2)) conv2 = tf.nn.max_pool(conv2, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') conv2 = tf.nn.dropout(conv2, rate=1 - keep_prob) w_c3 = tf.Variable(w_alpha * tf.random_normal([3, 3, 64, 64])) b_c3 = tf.Variable(b_alpha * tf.random_normal([64])) conv3 = tf.nn.relu(tf.nn.bias_add(tf.nn.conv2d(conv2, w_c3, strides=[1, 1, 1, 1], padding='SAME'), b_c3)) conv3 = tf.nn.max_pool(conv3, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') conv3 = tf.nn.dropout(conv3, rate=1 - keep_prob) w_d = tf.Variable(w_alpha * tf.random_normal([8 * 20 * 64, 1024])) b_d = tf.Variable(b_alpha * tf.random_normal([1024])) dense = tf.reshape(conv3, [-1, w_d.get_shape().as_list()[0]]) dense = tf.nn.relu(tf.add(tf.matmul(dense, w_d), b_d)) dense = tf.nn.dropout(dense, rate=1 - keep_prob) w_out = tf.Variable(w_alpha * tf.random_normal([1024, MAX_CAPTCHA * CHAR_SET_LEN])) b_out = tf.Variable(b_alpha * tf.random_normal([MAX_CAPTCHA * CHAR_SET_LEN])) out = tf.add(tf.matmul(dense, w_out), b_out) return out # 训练 def train_crack_captcha_cnn(): output = crack_captcha_cnn() loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=output, labels=Y)) # 计算损失 optimizer = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss) # 计算梯度 predict = tf.reshape(output, [-1, MAX_CAPTCHA, CHAR_SET_LEN]) # 目标预测 max_idx_p = tf.argmax(predict, 2) # 目标预测最大值 max_idx_l = tf.argmax(tf.reshape(Y, [-1, MAX_CAPTCHA, CHAR_SET_LEN]), 2) # 真实标签最大值 correct_pred = tf.equal(max_idx_p, max_idx_l) accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32)) # 准确率 saver = tf.train.Saver() with tf.Session() as sess: sess.run(tf.global_variables_initializer()) step = 0 while True: batch_x, batch_y = get_next_batch(64) _, loss_ = sess.run([optimizer, loss], feed_dict={X: batch_x, Y: batch_y, keep_prob: 0.75}) print(step, loss_) if step % 100 == 0: batch_x_test, batch_y_test = get_next_batch(100) acc = sess.run(accuracy, feed_dict={X: batch_x_test, Y: batch_y_test, keep_prob: 1.}) print(step, "准确率:",acc) if acc > 0.85: saver.save(sess, "D:/justin/captcha/model/85", global_step=step) step += 1 def crack_captcha(captcha_image, output): saver = tf.train.Saver() with tf.Session() as sess: sess.run(tf.initialize_all_variables()) # 获取训练后的参数 checkpoint = tf.train.get_checkpoint_state("model") if checkpoint and checkpoint.model_checkpoint_path: saver.restore(sess, checkpoint.model_checkpoint_path) print("Successfully loaded:", checkpoint.model_checkpoint_path) else: print("Could not find old network weights") predict = tf.argmax(tf.reshape(output, [-1, MAX_CAPTCHA, CHAR_SET_LEN]), 2) text_list = sess.run(predict, feed_dict={X: [captcha_image], keep_prob: 1}) text = vec2text(text_list) return text if __name__ == '__main__': train = 1 # 0: 训练 1: 预测 if train == 0: number = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] ALPHABET = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] text, image = gen_captcha_text_and_image() print("验证码图像channel:", image.shape) # 图像大小 IMAGE_HEIGHT = 60 IMAGE_WIDTH = 160 MAX_CAPTCHA = len(text) print("验证码文本最长字符数", MAX_CAPTCHA) # 文本转向量 char_set = number + alphabet + ALPHABET + ['_'] # 如果验证码长度小于4, '_'用来补齐 CHAR_SET_LEN = len(char_set) # placeholder占位符 X = tf.placeholder(tf.float32, [None, IMAGE_HEIGHT * IMAGE_WIDTH]) Y = tf.placeholder(tf.float32, [None, MAX_CAPTCHA * CHAR_SET_LEN]) keep_prob = tf.placeholder(tf.float32) train_crack_captcha_cnn() # 预测时需要将训练的变量初始化 if train == 1: # 自然计数 step = 0 # 正确预测计数 rightCnt = 0 # 设置测试次数 count = 10 number = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] ALPHABET = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] IMAGE_HEIGHT = 60 IMAGE_WIDTH = 160 char_set = number + alphabet + ALPHABET + ['_'] CHAR_SET_LEN = len(char_set) MAX_CAPTCHA = 4 # placeholder占位符 X = tf.placeholder(tf.float32, [None, IMAGE_HEIGHT * IMAGE_WIDTH]) Y = tf.placeholder(tf.float32, [None, MAX_CAPTCHA * CHAR_SET_LEN]) keep_prob = tf.placeholder(tf.float32) output = crack_captcha_cnn() saver = tf.train.Saver() with tf.Session() as sess: sess.run(tf.global_variables_initializer()) # 获取训练后参数路径 checkpoint = tf.train.get_checkpoint_state("model") if checkpoint and checkpoint.model_checkpoint_path: saver.restore(sess, checkpoint.model_checkpoint_path) print("Successfully loaded:", checkpoint.model_checkpoint_path) else: print("Could not find old network weights.") while True: text, image = gen_captcha_text_and_image() f = plt.figure() ax = f.add_subplot(111) ax.text(0.1, 0.9,text, ha='center', va='center', transform=ax.transAxes) plt.imshow(image) plt.show() image = convert2gray(image) image = image.flatten() / 255 predict = tf.math.argmax(tf.reshape(output, [-1, MAX_CAPTCHA, CHAR_SET_LEN]), 2) text_list = sess.run(predict, feed_dict={X: [image], keep_prob: 1}) predict_text = vec2text(text_list) predict_text = crack_captcha(image, output) print("step:{} 真实值: {} 预测: {} 预测结果: {}".format(str(step), text, predict_text, "正确" if text.lower() == predict_text.lower() else "错误")) if text.lower() == predict_text.lower(): rightCnt += 1 if step == count - 1: print("测试总数: {} 测试准确率: {}".format(str(count), str(rightCnt / count))) break step += 1
06-20
要使用GPU进行模型训练以加速训练速度,需要确保TensorFlow能够正确识别并使用GPU。以下是对提供代码的修改步骤和示例代码。 #### 检查GPU是否可用 在代码开头添加以下代码,检查TensorFlow是否能够识别GPU: ```python import tensorflow as tf print("Num GPUs Available: ", len(tf.config.list_physical_devices('GPU'))) ``` #### 确保TensorFlow GPU版本已安装 要使用GPU进行训练,需要安装TensorFlow的GPU版本。可以使用以下命令安装: ```bash pip install tensorflow-gpu ``` #### 修改代码以使用GPU 原代码在大多数情况下会自动使用可用的GPU进行训练,无需额外修改。但为了确保代码在GPU上运行,可以使用以下代码块来指定设备: ```python import tensorflow as tf # 检查GPU是否可用 if tf.config.list_physical_devices('GPU'): print('Using GPU') with tf.device('/GPU:0'): # 原代码中的模型创建、编译和训练部分 # ... # 示例:创建模型 def create_model(): # input layer of model for brain signals inputs = tf.keras.Input(shape=(x_train.shape[1],)) # Hidden Layer for Brain signal using LSTM(GRU) expand_dims = tf.expand_dims(inputs, axis=2) gru = tf.keras.layers.GRU(256, return_sequences=True)(expand_dims) # Flatten Gru layer into vector form (one Dimensional array) flatten = tf.keras.layers.Flatten()(gru) # output latyer of Model outputs = tf.keras.layers.Dense(3, activation='softmax')(flatten) model = tf.keras.Model(inputs=inputs, outputs=outputs) print(model.summary()) return model # cretaing model lstmmodel = create_model() # Compiling model lstmmodel.compile( optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'] ) # Training and Evaluting model history = lstmmodel.fit(x_train, y_train, epochs = 10, validation_split=0.1) loss, acc = lstmmodel.evaluate(x_test, y_test) # Loss and Accuracy of model on Testiong Dataset print(f"Loss on testing: {loss*100}",f"\nAccuracy on Training: {acc*100}") # predicting model on test set for plotting Confusion Matrix pred = lstmmodel.predict(x_test) else: print('Using CPU') # 原代码中的模型创建、编译和训练部分 # ... ```修改后出现Traceback (most recent call last): File "C:\Users\86139\Desktop\pythonProject1\main.py", line 147, in <module> pred1 = np.argmax(pred, axis=1) ^^^^ NameError: name 'pred' is not defined,而且还是使用的cpu
11-19
import numpy as np # linear algebra import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv) import seaborn as sns import matplotlib.pyplot as plt from sklearn.preprocessing import StandardScaler import tensorflow from sklearn.model_selection import train_test_split from tensorflow.keras.utils import to_categorical import tensorflow as tf from tensorflow.keras import Sequential from tensorflow.keras.optimizers import SGD from tensorflow.keras.layers import Dense, Dropout from tensorflow.keras.layers import Embedding from tensorflow.keras.layers import LSTM tf.keras.backend.clear_session() from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay from sklearn import datasets, tree, linear_model, svm from sklearn.metrics import confusion_matrix, classification_report from sklearn.ensemble import RandomForestClassifier from sklearn.naive_bayes import GaussianNB from sklearn.metrics import confusion_matrix, classification_report from sklearn.ensemble import RandomForestClassifier from sklearn.naive_bayes import GaussianNB from sklearn.metrics import confusion_matrix import seaborn as sns import tensorflow as tf print("Num GPUs Available: ", len(tf.config.list_physical_devices('GPU'))) data = pd.read_csv("./emotions.csv") # Seprarting Positive,Neagtive and Neutral dataframes for plortting pos = data.loc[data["label"] == "POSITIVE"] sample_pos = pos.loc[2, 'fft_0_b':'fft_749_b'] neg = data.loc[data["label"] == "NEGATIVE"] sample_neg = neg.loc[0, 'fft_0_b':'fft_749_b'] neu = data.loc[data["label"] == "NEUTRAL"] sample_neu = neu.loc[1, 'fft_0_b':'fft_749_b'] #plottintg Dataframe distribution plt.figure(figsize=(25,7)) plt.title("Data distribution of Emotions") plt.style.use('fivethirtyeight') sns.countplot(x='label', data=data) plt.show() #Plotting Positive DataFrame plt.figure(figsize=(16, 10)) plt.plot(range(len(sample_pos)), sample_pos) plt.title("Graph of Positive Columns") plt.show() '''As we can noticed the most of the Negative Signals are from greater than 600 to and less than than -600''' #Plotting Negative DataFrame plt.figure(figsize=(16, 10)) plt.plot(range(len(sample_neg)), sample_neg) plt.title("Graph of Negative Columns") plt.show() #Plotting Neutral DataFrame plt.figure(figsize=(16, 10)) plt.plot(range(len(sample_neu)), sample_neu) plt.title("Graph of Neutral Columns") plt.show() def Transform_data(data): #Encoding Lables into numbers encoding_data = ({'NEUTRAL': 0, 'POSITIVE': 1, 'NEGATIVE': 2} ) data_encoded = data.replace(encoding_data) #getting brain signals into x variable x=data_encoded.drop(["label"] ,axis=1) #getting labels into y variable y = data_encoded.loc[:,'label'].values scaler = StandardScaler() #scaling Brain Signals scaler.fit(x) X = scaler.transform(x) #One hot encoding Labels Y = to_categorical(y) return X,Y #Calling above function and splitting dataset into train and test X,Y = Transform_data(data) x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size = 0.2, random_state = 4) if tf.config.list_physical_devices('GPU'): print('Using GPU') with tf.device('/GPU:0'): # 原代码中的模型创建、编译和训练部分 # ... # 示例:创建模型 def create_model(): # input layer of model for brain signals inputs = tf.keras.Input(shape=(x_train.shape[1],)) # Hidden Layer for Brain signal using LSTM(GRU) expand_dims = tf.expand_dims(inputs, axis=2) gru = tf.keras.layers.GRU(256, return_sequences=True)(expand_dims) # Flatten Gru layer into vector form (one Dimensional array) flatten = tf.keras.layers.Flatten()(gru) # output latyer of Model outputs = tf.keras.layers.Dense(3, activation='softmax')(flatten) model = tf.keras.Model(inputs=inputs, outputs=outputs) print(model.summary()) return model # cretaing model lstmmodel = create_model() # Compiling model lstmmodel.compile( optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'] ) # Training and Evaluting model history = lstmmodel.fit(x_train, y_train, epochs = 10, validation_split=0.1) loss, acc = lstmmodel.evaluate(x_test, y_test) # Loss and Accuracy of model on Testiong Dataset print(f"Loss on testing: {loss*100}",f"\nAccuracy on Training: {acc*100}") # predicting model on test set for plotting Confusion Matrix pred = lstmmodel.predict(x_test) else: print('Using CPU') # Creation of Function of Confusion Matrix def plot_confusion_matrix(cm, names, title='Confusion matrix', cmap=plt.cm.Blues): plt.imshow(cm, interpolation='nearest', cmap=cmap) plt.title(title) plt.colorbar() tick_marks = np.arange(len(data.label.unique())) plt.xticks(tick_marks, names, rotation=90) plt.yticks(tick_marks, names) plt.tight_layout() plt.ylabel('True label') plt.xlabel('Predicted label') # after getting prediction checking maximum score prediction to claim which emotion this brain signal belongs to pred1 = np.argmax(pred, axis=1) # inversing the one hot encoding y_test1 = np.argmax(y_test, axis=1) # printing first 10 Actual and predicted outputs of Test brain signals print("Predicted: ", pred1[:10]) print("\n") print("Actual: ", y_test1[:10]) # Plotting Confusion matrix of Lstm Model cm = confusion_matrix(y_test1, pred1) np.set_printoptions(precision=2) print('Confusion matrix, without normalization') print(cm) plt.rcParams["figure.figsize"] = (20, 5) plt.figure() plot_confusion_matrix(cm, ["Neutral", "Positive", "Negative"])运行后出现Traceback (most recent call last): File "C:\Users\86139\Desktop\pythonProject1\main.py", line 147, in <module> pred1 = np.argmax(pred, axis=1) ^^^^ NameError: name 'pred' is not defined Using CPU,我需要解决问题并使用GPU
最新发布
11-19
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量子象限

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值